Identity Forge MCP
OfficialIdentity Forge MCP is a branding pipeline server that enables AI agents to discover, apply, and manage design systems, compose brand layers, and conduct naming research.
Design Kit Discovery & Inspection: Browse, search, rank, and compare themes. Fetch full design briefs (
DESIGN.md) and tokens in multiple formats (CSS, Tailwind, DTCG, JSON). Match palettes and find similar kits.Apply and Maintain Design Kits: Apply a theme to a project, writing design files and a version stamp with conflict detection and preview. Check applied theme status for drift.
Brand Composition: Attach image directions, interface styles, and page recipes to a brand. Export the complete brand as a single merged document.
Custom Kit Authoring: Create, remix, update, and delete private design kits. Access version history and diff changes.
Brand Projects & Collaboration: Create brand projects, add variations, share read-only client review links (password-protected), collect feedback, and manage mockup generation.
Naming & Research: Generate names, manage a kanban board for candidates, perform web searches for evidence, check domain availability and trademarks. Persist external candidates.
Project Context & Recommendations: Store product context and receive kit recommendations tailored to audience, stack, and constraints.
Version History & Diffing: Review timelines, snapshots, and diffs for both kits and brand projects.
Account Management: Check plan, quotas, credits, and saved kit slots.
Search and browse the Google Fonts catalog to choose typography, and find font pairings for heading, body, and mono roles.
Free to use. 69 of 79 design kits are free, with all 6 export formats, the CLI, the MCP server, and the API. No account required. Pro unlocks 10 additional kits, 1,000 AI generations/month, and advanced features.
For people
Identity Forge gives a coding agent a complete visual system before it starts
building. Choose a design kit yourself, or let the agent rank the catalog
against your product and the mood you want. Each kit includes typography,
semantic color tokens, layout, motifs, dos and don'ts, and a DESIGN.md the
agent can build from.
The agent can export the kit as CSS, Tailwind v3 or v4, shadcn registry data, DTCG tokens, or JSON, then apply it with conflict protection. Brand naming, domain research, and shareable client projects live in the same workflow.
Public Free kits work without an account. Browse the design kits or read how the agent flow works before installing anything.
Watch it work
The three-minute lifecycle film follows a design system from the first choice through product imagery, an ecommerce rebuild, a later brand update, an older-site rebuild, and team review. The Aubade storefront and Shiftly rebuild are complete one-shot agent builds from real Identity Forge design systems. The Commonkeep review uses synthetic showcase data in the real review experience.
https://github.com/user-attachments/assets/fc3cdba2-4876-46e5-a92a-09ce6d7071ff
Download the full-resolution 1080p WebM.
Related MCP server: ds-pilot
For agents
Install the local MCP server into the client you use:
npx --yes identityforge@latest install --client claude-code # Claude Code
npx --yes identityforge@latest install --client cursor # Cursor
npx --yes identityforge@latest install --client vscode # VS Code / Copilot
npx --yes identityforge@latest install --client codex # CodexAlso supported: gemini, opencode, pi. Every client runs the same local
stdio server, and install merges into your existing config rather than
replacing it. Config paths for all seven are in
Install into an agent.
Public Free kits work immediately, without a key. Tell your agent:
Use Identity Forge to pick a theme that fits this product, apply it, and follow the DESIGN.md.
Sign in for persistent projects, saved work, authenticated quota, or Pro access:
npx --yes identityforge@latest loginNo account yet? In the browser, sign up, complete the security check, select
Send verification email, and open its link. Then select
Confirm email and continue, approve the resumed authorization, and the CLI
receives the key automatically.
Use-case discovery
Every use-case lane has two checks. First, the kit's authored audience or bestFor must name that kind of product. Then concrete token measurements such as text contrast, chart-series distinctness, and information density rank the eligible kits. Visual tags help search but do not establish product fit. A high technical score cannot put an unrelated kit into a lane. The per-lane prose justification is switched off catalogue-wide pending re-enrichment, so a score arrives without a sentence explaining it.
list_themes({ use: "data-dashboard" })returns kits authored for dashboards, ordered by their measured dashboard fit.list_themes({ q: "calm fintech dashboard" })runs a synonym-aware ranked search across moods, industries, and use cases.search_themesreturns the whole catalog unranked so the agent can weigh a subtle brief itself.
Use the lane to shortlist and the order to compare. Do not turn the score into an explanation: it ranks technical fit after authored intent, but does not say why the kit suits a particular brief.
For the data lanes there is a better answer than the score. Every kit summary carries a charts block measured on the mode the kit ships in: minDeltaE and cvdMinDeltaE (the closest pair of series colors, plain and under colorblind simulation), distinct, hueFamilies, severityHeadroom (how close any series comes to the destructive, warning and success roles — 0 means a category color IS a status color), sequentialReady, and designed, which is false when the kit defines no chart slots and the five were cycled from its brand roles. Those are measurements, so unlike the fitness score they can be stated to a user as the reason for a recommendation.
Use-case lanes: data-dashboard, admin-internal-tool, saas-marketing, landing-page, ecommerce-store, portfolio, editorial-blog, docs-knowledge-base, mobile-app, business-services, community-social, ai-agent-chat.
The same discovery runs the kit gallery and the HTTP API (GET /api/v1/kits?use=…&q=…, see llms.txt).
Install into an agent
install --client <name> writes the MCP server config for that agent, merging into any existing config:
Client |
| Config file |
Claude Code |
|
|
Cursor |
|
|
Codex |
|
|
Gemini CLI |
|
|
VS Code / Copilot |
|
|
opencode |
|
|
Pi |
|
|
All of them run the same local stdio server via npx -y identityforge@latest mcp.
After installation, identityforge doctor --client <name> checks that the client
points at the rolling package and initializes the package's MCP server without
calling the Identity Forge API or spending quota.
Install the agent plugin and skill
The repository also bundles the MCP server with an Agent Skill that tells the agent when
to use Identity Forge, how free and authenticated access differ, and how to guide a human
through Send verification email before the pending browser authorization resumes.
Claude Code:
claude plugin marketplace add KasayoDotCom/identityforge-mcp
claude plugin install identity-forge@identity-forgeGitHub Copilot CLI:
copilot plugin marketplace add KasayoDotCom/identityforge-mcp
copilot plugin install identity-forge@identity-forgeCodex and other Agent Skills-compatible clients:
npx skills add KasayoDotCom/identityforge-mcpCursor metadata is included for directory distribution. Until it is listed there, use
the install --client cursor command above to connect the same MCP server.
MCP tools
Once connected, your agent gets 63 tools. Browsing free kits needs no key; scopes are noted where they apply.
Find a design kit
list_themes: browse the catalog as compact summaries. Rank by use-case lane withuse, run ranked search withq, page withoffset, sort byfeatured,popular,recent,name, orfit.search_themes: return the whole catalog unranked, for briefs too subtle to rank against a lane.similar_themes: given a kit slug, find neighbours by palette, tags, and audience.match_palette: given existing brand colors, rank kits by perceptual color distance.
Choose typography outside a kit
A kit already names its heading, body, and mono faces. These two answer the cases where it does not.
search_fonts: browse the Google Fonts catalog by name or category, or passlikewith a family you already have to find faces that resemble it. Metadata only, andlikereads no letterform, so confirm the look before promising it.suggest_font_pairings: the curated heading/body/mono table, or what goes beside one family the user is committed to.
Read and apply one
get_design_md: fetch a kit's DESIGN.md, the full design brief.get_tokens: fetch tokens asdtcg,css,tailwind-v3,tailwind-v4,shadcn-registry, orjson.apply_theme: write DESIGN.md, a tokens file, and anidentityforge.jsonstamp into the project. It refuses rather than overwriting a file it did not write, see below.
What apply writes, and what it will not overwrite
apply_theme (and identityforge apply) writes three files into the target directory:
Identity Forge requests carry one random reference that lasts only for the
current CLI or MCP process. A local apply reports one bounded result: files
written, artifacts already current, a safe conflict refusal, or the stage where it failed. The report
contains counts and classifications, never local paths or error prose. Running
as an MCP server, requests also carry the client name
your editor or agent already sends in the MCP handshake (claude-code,
cursor-vscode, codex), so usage can be attributed to a product rather than to
nothing. None of this includes paths, filenames, prompts, file contents,
repository names, exception text, or a persistent installation identifier. Set
IDENTITYFORGE_TELEMETRY=0 to omit the process reference and local outcome
reports; ordinary API requests still appear in server access logs.
File | What it is |
| the design brief the agent builds from |
| the tokens, named for the format you asked for |
| the stamp: which kit was applied, at which version, and a SHA-256 of every file written |
The stamp belongs to your repository, not to the kit. It records what this codebase was built against, which is a fact the server cannot know, so commit it. It is also what makes applying safe: before writing anything, apply compares what is on disk against the hashes in the stamp.
A file that does not exist gets created.
A file whose content already matches the kit is left alone.
A file the last apply wrote, still byte-identical, is updated when the kit has moved.
A file that is not recorded in the stamp, for example a
DESIGN.mdyou wrote yourself, or one that changed since it was written, is a conflict.
On a conflict the default is to write nothing at all, name every conflicting file, and exit non-zero. Nothing is written until every file is planned, so a failed fetch cannot leave the directory half applied.
identityforge apply acid-signal-black --preview # plan only, writes nothing
identityforge apply acid-signal-black # refuses if anything conflicts
identityforge apply acid-signal-black --force # overwrites, content is lost--force is destructive and unrecoverable: the current content of the conflicting files is gone, and the report names each one. Preview first, show the person what would change, and let them decide.
What the stamp records, and how a later apply reads it
{
"stampVersion": 1, // shape of this file, so a reader never has to guess
"designMdContract": "1.0", // shape of the DESIGN.md you built against — not the kit's
// revision and not this file's. Three different versions
// live here; flattening any two invents a baseline.
"kit": {
"id": "c2d13a12-…", // permanent. diff against this, never the slug
"slug": "sage-slate-editorial",
"version": 0, // the kit's monotonic revision, as the export reported it
"designMdDigest": "sha256:…"
},
"layers": [],
"artifacts": [{ "path": "DESIGN.md", "hash": "sha256:…", "writtenAt": "…" }],
"integration": { "tokensEntry": null },
"appliedAt": "…"
}kit.version has three distinct meanings and they must not be collapsed. A number is the kit's revision. 0 means the kit exists and has no minted version yet. null means the export did not report a version at all, which is a different fact, and reading it as 0 would put a baseline in your repository that was never true. Identity is copied from the export's own front matter; nothing here is inferred.
Re-applying reads that back:
The version moved — the server's own count says the kit changed. Re-read the brief.
Same version, different rendered file — the
DESIGN.mdserializer changed, not the kit. No action.No version on both sides — only the digest is available, and it cannot tell those two cases apart, so it says so rather than guessing.
Because the id is the durable handle, renaming a kit's slug is not reported as "you applied a different kit". A stamp written by a newer CLI than yours is refused rather than half-understood: every file counts as unrecorded, so the apply stops instead of overwriting on a record it cannot fully read.
status: ask the stamp what moved
identityforge status # the current directory
identityforge status --dir apps/webIt takes no kit and no version, because the stamp already holds both. themes diff --from N needs you to know the kit and read the number out of the JSON yourself; apply --preview needs the slug and fetches a whole write plan to answer a read-only question. status reads identityforge.json, asks the server by id, and reports the three movements the stamp implies, separately:
kitMoved— the server's own version count differs. The design changed.documentMoved— the renderedDESIGN.mdbytes differ. A serializer change alone does that to every kit at once, so on its own it is not a reason to touch your code.contractMoved—designMdContractdiffers. The document's shape changed: a section added, renamed, or removed. That is a third question, and neither of the other two answers it.
Each is null rather than false when one side cannot answer, and a note says which side was missing. If the kit did move and both versions are numbers, the same diff themes diff would have printed is included. It also hashes every artifact the stamp recorded against what is on disk, so a DESIGN.md you have since edited by hand shows as modified before you re-apply over it.
It writes nothing and never touches the working tree. Losing your key or hitting a Pro gate degrades it to a local-only report with a note, rather than failing. JSON goes to stdout and the human summary to stderr, so identityforge status | jq .moved works while a person still sees the sentence.
Complementary collections
These answer questions a kit does not. None of them replace the kit.
list_image_directions/get_image_direction: choose and export how the project's imagery should be presented and repeated.list_interface_styles/get_interface_style: choose and export a neutral render grammar for surfaces and hierarchy, applied through a kit.list_page_recipes/get_page_recipe: choose and export how a page should argue its case.
When the user supplies a real product, person, or object, use the approved image as fixed input to a reference-preserving image editor. Shape project-specific presentation routes around it: setting, supporting elements, composition, lighting, surfaces, crop, finish, and variation rules. Keep the source identity exact, compare every result with it at full resolution, and avoid recreating an existing product from text or placing a cutout over a separately generated background. If the current agent cannot perform reference-led editing, hand the source image and exported direction to a product-image workflow. Identity Forge provides the brief; it does not render the images in this flow.
Author kits and brands (kits:write)
create_theme: author a private kit from scratch or by forking a catalog kit with overrides covering tokens, colors, fonts, and facet presets.remix_theme: copy a resolvable kit into a new private kit with overrides applied.update_theme: edit one of your saved kits in place, keeping its slug and publication state so existing consumers follow the change. Overwrites the stored kit, but every save mints a version, so the replaced state stays readable through the version tools below. The slug itself cannot be renamed here, andexpectedUpdatedAtturns a concurrent edit into a 409 instead of a silent overwrite.delete_theme: permanently delete one of your saved kits. Passconfirm: true; a kit still referenced by a brand project is refused with409 kit_in_use, so retire or repoint those references first.create_brand_projectandlist_brand_projects: the container for brand variations and a client share.add_brand_variation: attach a proposal to a project, with a kit plus optional name, domain, label, and notes.update_brand_variation: revise one proposal in place, including repointing it at a different kit. The client sees it on their next view.remove_brand_variation: permanently delete one proposal and its comments. Passconfirm: true; it is not undoable.revoke_brand_share: permanently withdraw a client link. Passconfirm: true; sharing again mints a new token.reorder_brand_variations: set the order the client meets the directions in. Must list every variation exactly once.share_brand_project: create or rotate a read-only/p/<token>client share link, optionally password protected.list_client_comments(kits:read): read what the client wrote on each variation. The return leg of the share loop.
Compose the other axes onto a brand
A brand is a design kit plus an image direction, an interface style, and any number of page recipes. Those references live on the PROJECT, not the kit, so swapping the kit leaves them alone.
get_brand_layers(kits:read): what a brand is composed of, with both revision numbers on every reference anddriftpresent only where the record has moved since it was pinned.meta.driftedcounts them, andlinks.previewis the composition rendered as an image. Reads nothing into the brand: no version is minted and no pin moves.add_brand_layer: compose one record onto the brand, recording the revision it is at now so a later read can report a change rather than apply it silently. One tool for all three axes viaaxis. Image direction and interface style hold one each; a second is refused with 409 unless you passreplace: true, which is also how you accept a drifted revision.remove_brand_layer: take one off. Passconfirm: true; it names the record rather than the axis, so a stale view cannot clear a layer it never saw, and repeating it is a no-op.export_brand(kits:read): the brand as ONE document, ready to build from — the kit'sDESIGN.mdwith every pinned layer written into it, under the precedence rule that decides which wins when they disagree (the kit owns identity, a layer owns application). Use it instead of merging the kit and each layer yourself. A layer the key cannot open is named with its page and an upgrade path rather than dropped; a brand with no chosen kit answers 409 instead of returning a placeholder nobody picked.
Describe the product once, then get proposals grounded in it
get_project_context/set_project_context: store what the product is — what it does, who it is for, its constraints, what has been ruled out, its screens, its stack — on a brand project. Every later proposal is grounded in it, including in a session that never saw the description.recommend_kits({projectId}): candidates for that product, each carrying the kit's own evidence and its judged fitness for the surfaces the product actually has. With Pro and akits:writekey you also get a model ranking with a reason per candidate;meta.depthisrankedorcandidates.
Two things that surprise people:
set_project_contextREPLACES. The endpoint isPUT, notPATCH, so a field you omit is deleted rather than kept. That is deliberate — a merging update would let you drop a surface from the list and silently keep the old one — but it means you read withget_project_contextfirst and send the whole object back with your edit applied.recommend_kitscosts 3 quota units and needs a key, wherelist_themescosts 1 and every other discovery route works anonymously. The reasoning is in the route's own docstring: it takes a free-text body rather than query parameters, and it is the one route that can grow into a metered model call. Writing a context needskits:write; reading one needs onlykits:read.
Has it changed since I built? (read-only)
list_kit_versions,get_kit_version,diff_kit_versions: a kit's version timeline, one past snapshot in full, and what moved between two versions.diff_kit_versions({slug, from})with no upper bound compares against the current version, which is the question a repo with anidentityforge.jsonactually has.list_brand_project_versions,get_brand_project_version,diff_brand_project_versions: the same three for a brand project, owner-scoped.list_kit_history,get_kit_history_event: the same kit's ledger, which is a wider record than its version timeline.kit_history_eventscarries three event types — created, saved, and applied to a brand — and only the first two mint a version, so an apply appears in the ledger and nowhere else. Ask the ledger whether a kit was ever actually used; ask the timeline what its tokens were. It pages by an opaque cursor rather than a version number, because an event has no ordinal to page below. Share: pause or withdraw.update-shareis the reversible one and almost always the right one —--disablepauses the link, the token is untouched, and a URL already with the client works again the moment you resume.revoke-shareis permanent: the/p/<token>URL stops resolving wherever it was pasted, including in an email already sent, and sharing again mints a new token and deliberately never the old one. It refuses without--yes.whoami: plan, granted and missing scopes, remaining quota, AI credits, and saved-kit slots. Free, and never refused for being over quota, so it still answers after a 429.
None of these writes anything. Restoring an old state is an update_theme call you make deliberately.
What actually has history. Saved kits and managed catalog kits accumulate versions. A static catalog fallback stays at version 0 until it is promoted into the managed catalog. The separate kit history ledger remains owner-only and records creation, saves, and applications to a brand. On brand projects the whole brand is recorded: name and domain, fonts, pinned layers, project context, and the variations, including a reorder. What is deliberately not recorded is sharing, because who may see a brand is not what the brand is.
What a Pro gate does to them. For a kit you are not entitled to, the timeline still lists versions but the author's free-text note is null, and a diff returns each change marked redacted: true with its path and CSS variable but no before or after, plus a redactedChanges count. get_kit_version returns the whole payload, so it answers 403 instead.
Name a brand (naming:read / naming:write)
list_naming_recipes: the full naming strategy catalog.list_naming_projectsandcreate_naming_project: reuse or create a durable board.generate_names: generate with Identity Forge's own model. Spends AI credits only when unique candidates persist.add_name_candidates: persist names from the active agent, an authorized offline process, or manual research, using stable caller UUIDs. Spends no credits.list_name_candidates: read the kanban board with provenance and evidence.list_name_generations: audit model, prompt, request, and credit provenance.move_name_candidatesandrank_name_candidates: atomically review, shortlist, rank, and select.get_naming_research_context: read the brief, board, evidence, capabilities, and small-task handoff contract, without server ranking.search_name_evidence: run bounded model-authored searches through self-hosted SearXNG and return evidence without verdicts. One account-wide monthly unit per query.check_domains: DNS plus distinct RDAP, registrar, and optional self-hosted SERP evidence. Basic research costs one unit per unique domain; SERP adds one. Absent DNS records only mean a domain might be available.assess_domain_acquisition: state whether the goal is a new registration, an aftermarket purchase, or either. It reports registrar registration evidence and bounded public landing-page evidence separately, including literal sale, marketplace, reserved-page, and visible-price signals. It never validates the seller or guarantees purchase. Aftermarket evidence adds one unit per unique domain; an exact successful repeat within ten minutes costs zero.
Trademark screening remains a separate manual step through the official registers for each relevant jurisdiction. Record the query, classes, source URL, result wording, and date. This is preliminary research, not legal clearance.
Build a brand and share it with a client
The kits:write tools let an agent build a whole brand package end to end:
create_themeorremix_themeto compose four or five contrasting directions, either forking a catalog kit and overriding colors, fonts, and facets, or authoring from scratch.create_brand_project, one project per client brief.add_brand_variationto attach each direction with a brand name, domain, and label.share_brand_projectto hand the client a/p/<token>link, optionally password protected, where they cycle the variations and comment.list_client_commentsto read what came back, thenupdate_theme,update_brand_variation,remove_brand_variation, andreorder_brand_variationsto revise the same board rather than starting a second one.
Everything an agent creates it can also revise. The write tools change live, client-visible state; destructive tools require confirm: true, so read the feedback before acting on it.
New keys carry kits:write by default. A key minted before that scope existed will 403 until you re-run identityforge login or create a new scoped key.
The MCP server also ships connect-time instructions describing this workflow, so a connected agent knows how to go from intent to an applied kit without being told the steps.
How an agent picks a kit
When you ask your agent for a look and feel, it should:
Gather intent: what the product is, who it is for, and the mood you want, for example "fintech dashboard for SMBs, calm and trustworthy".
Find candidates:
list_themes({ use })when the build target maps to a use-case lane,list_themes({ q })for ranked search, orsearch_themesto rank the whole catalog against a subtle brief. If you already have brand colors,match_palette({ colors })finds the closest kits.Review: each result is a compact summary with name, tags, a font and color glimpse, tier, and judged fitness.
similar_themes(slug)offers neighbours, andget_design_md(slug)reads the full brief before committing.Apply:
apply_theme(slug), optionally with atokensFormatmatching your stack, writesDESIGN.md, a tokens file, and theidentityforge.jsonstamp into the project. If the project already has files it did not write, it shows you the conflict instead of overwriting them.Implement: follow
DESIGN.mdand wire the tokens into your styling layer, whether CSS variables, a Tailwind@themeblock, or shadcn.
The more concrete your description, the better the match.
Ids and slugs
Every kit has an opaque id and a slug, and either one addresses it directly, so once you have a kit you can skip discovery. They differ in durability:
The id never changes. It is minted once, is never reassigned, and always resolves to the same kit.
The slug is a public handle its owner can rename. A retired slug keeps resolving through an alias, so a rename alone does not break you. But a different kit can later claim that freed slug, and the live kit wins, so a stored slug can quietly start resolving to a different kit rather than failing loudly.
Pass the slug when a person typed it. Store the id for anything your agent keeps: a config value, a version stamp, a choice it repeats in a later session. list_themes prints both.
Image directions, interface styles, and page recipes carry ids too, and the same advice applies more strongly: they have no alias table, so a renamed slug there simply stops resolving.
CLI commands
npx -y identityforge@latest login # browser sign-in (PKCE loopback)
identityforge login --key ifk_… # or paste a key (headless)
identityforge whoami # plan, scopes, quota, credits, saved-kit slots (free)
identityforge usage # alias for whoami
identityforge update-check # current/latest package version as JSON
identityforge doctor --client codex # verify config and MCP capabilities without API usage
identityforge logout # remove stored credentials
identityforge themes # list kits
identityforge themes -q "fintech dashboard, calm and trustworthy"
identityforge themes get <id|slug> # print DESIGN.md to stdout, writing nothing
identityforge themes get <id|slug> --format tailwind-v4 > tokens.css
identityforge themes get <id|slug> --format json # the whole kit
identityforge themes get <id|slug> --marker # stale-write marker only
# Author, fork, and find neighbours (kits:write for the first two)
identityforge themes create --name "Acme" --base bento-noir --overrides o.json
identityforge themes remix <id|slug> --overrides o.json # copies; original untouched
identityforge themes delete <id|slug> --yes # permanent; refuses kits still in use
identityforge themes similar <id|slug> # nearby published kits
identityforge themes match "#1d4ed8" "#f97316" # kits closest to colors you hold
# Typography, for the cases a kit does not already settle
identityforge fonts search grotesk --category sans-serif # Google Fonts metadata, no files
identityforge fonts similar Inter # faces that resemble one you have
identityforge fonts pairings Fraunces --role heading # curated table + contrast suggestions
# Has this kit moved since I built against it? (read-only)
identityforge themes versions <id|slug> # version timeline, newest first
identityforge themes version <id|slug> 3 # one past snapshot, whole kit
identityforge themes diff <id|slug> --from 3 # what changed since version 3
# Everything that happened to it, which is a wider record (read-only)
identityforge themes history <id|slug> # + every apply-to-brand
identityforge themes history <id|slug> --cursor "$NEXT"
identityforge themes snapshot <id|slug> <event-id> # the kit at that entry
# Build a client brand project and read the feedback back (kits:write)
identityforge brand create --name "Acme rebrand" --brief "Calm fintech"
identityforge brand add-variation --project <uuid> --kit <id|slug> --brand-name Acme --label "Direction A"
identityforge brand share --project <uuid> --password hunter2
identityforge brand update-share --project <uuid> --disable # pause; token survives
identityforge brand revoke-share --project <uuid> --yes # permanent, new token next time
identityforge brand get --project <uuid> # one project in full
identityforge brand layers --project <uuid> # pinned catalogue records
identityforge brand add-layer --project <uuid> --axis imageDirection --record <id>
identityforge brand remove-layer --project <uuid> --axis imageDirection --record <id> --yes
# The kit's DESIGN.md with every pinned layer composed into it: the one document to build from
identityforge brand export --project <uuid> > DESIGN.md
identityforge brand comments --project <uuid>
identityforge brand projects
# Describe the product once, then ask for grounded proposals
identityforge brand context --project <uuid> # read the stored context
identityforge brand set-context --project <uuid> --file context.json # REPLACES it
identityforge brand recommend --project <uuid> # candidates (3 units, needs a key)
# Queue mockups: one AI credit per variation and scene combination
identityforge brand mockups generate --project <uuid> --variation <uuid> --item tshirt:front
identityforge brand mockups list --project <uuid>
identityforge brand mockups get --project <uuid> --job <uuid>
identityforge brand versions --project <uuid> # project history
identityforge brand version 3 --project <uuid> # one stored version, in full
identityforge brand diff --project <uuid> --from 2
# Act on the feedback: revise, retire, reorder (kits:write)
identityforge brand update-variation --project <uuid> --variation <uuid> --label "Warmer" --clear notes
identityforge brand remove-variation --project <uuid> --variation <uuid> --yes
identityforge brand reorder --project <uuid> <variation-uuid> <variation-uuid> <variation-uuid>
identityforge themes update <id|slug> --name "Acme v2" --expected-updated-at "$MARKER"
identityforge image-directions list # list public imagery judgments
identityforge image-directions get <slug> --format markdown
identityforge interface-styles list # list public render-grammar judgments
identityforge interface-styles get <slug> --format markdown
identityforge page-recipes list # list public page communication judgments
identityforge page-recipes get <slug> --format markdown
identityforge apply <slug> # write DESIGN.md + tokens + stamp into the current dir
identityforge apply <slug> --preview # plan it first, writing nothing
identityforge status # read the stamp: has the kit, the document, or its shape moved?
identityforge status --dir apps/web
identityforge mcp # run the MCP server over stdio
# Naming commands always print JSON
identityforge naming recipes
identityforge naming projects
identityforge naming create-project --name "My product" --description "Product, audience, market, desired character"
identityforge naming generate --project <uuid> --description "..." --recipes compoundWords,metaphor --count 12 --idempotency-key my-product-run-1
# Persist candidates proposed by the active agent or an authorized offline process (1-50 items)
identityforge naming add-candidates --project <uuid> --file candidates.json
# The same command accepts a JSON array or {"candidates":[...]} on stdin
identityforge naming add-candidates --project <uuid> --file - < candidates.json
identityforge naming candidates --project <uuid> --status shortlisted,finalist
identityforge naming generations --project <uuid>
identityforge naming research-context --project <uuid>
identityforge naming search --file research-tasks.json
identityforge naming acquisition candidate.com --intent either
identityforge naming move <candidate-uuid> --project <uuid> --status finalist --notes "Strong market fit"
identityforge naming rank <candidate-uuid>=1 <candidate-uuid>=2 --project <uuid>
identityforge naming domains candidate.de candidate.com --serp --market "Germany heating retail" --language de-DE
# Registrar evidence alongside DNS and RDAP, the closest this gets to an availability answer
identityforge naming domains candidate.de --registrar
# Record WHY a candidate moved, not only that it did
identityforge naming move <candidate-uuid> --project <uuid> --status rejected --evidence why.jsonGuarding a naming write. naming move and naming rank take
--expected-updated-at, so a candidate that changed since you read it answers 409 instead of
being silently overwritten. Take the marker from naming candidates, pass it back byte for byte,
and never parse it: it looks like a timestamp and is compared as an opaque string.
identityforge naming candidates --project <uuid> --status finalist # read updatedAt from the row
identityforge naming move <candidate-uuid> --project <uuid> --status selected \
--expected-updated-at "<marker>"The marker guards one candidate, so passing it with several ids is refused before anything is
sent rather than applied to all of them: each row has its own marker, and spreading one across a
batch would guard the wrong rows. Move the guarded candidate on its own. This matters most for
--status selected, which also sets the project's chosen brand name.
--evidence is different: it is not row-specific, so it applies to every candidate in the batch.
It takes a path or - for stdin, and a file that will not parse is refused rather than sent as an
empty object, which would record "no evidence" as though it were the considered answer.
Editing a saved kit without clobbering a concurrent edit
PATCH accepts an expectedUpdatedAt marker and answers 409 rather than overwriting a kit that moved since you read it. Read the current marker with themes get --marker:
MARKER=$(identityforge themes get my-kit --marker)
identityforge themes get my-kit --format json > kit.json
# ... edit kit.json, then guard the write with the marker you read
identityforge themes update my-kit --kit kit.json --expected-updated-at "$MARKER"--kit is deep merged over the stored kit, so a file holding only what changed is enough. Leave slug as it is: it is the kit's public handle, and a payload carrying a different one is rejected with 400 slug_rename_unsupported rather than quietly ignored. Omitting --expected-updated-at still works and still writes; it just overwrites whatever is stored, including an edit someone made since your read, so the command says so on stderr.
The marker is opaque. Echo it back byte for byte and never parse it. It crosses the wire as a raw Postgres timestamp rather than ISO-8601, and the guard compares strings, so a client that parses it into a Date and serialises it back never matches and gets 409 forever. Parsing also drops the microseconds, so a comparison that normalises both sides can falsely match and let a genuinely stale write through. A curated catalog kit has no marker, because it has no row and cannot be edited.
Authentication
Commands authenticate with an Identity Forge API key (ifk_…). login stores it in ~/.identityforge/config.json with mode 600. You can also set it per shell:
export IDENTITYFORGE_API_KEY=ifk_…
export IDENTITYFORGE_API_URL=https://identityforge.io # override the API base
export IDENTITYFORGE_TELEMETRY=0 # optional: disable apply-completion countingFree kits and naming-recipe discovery work without a key. Sign in to keep persistent projects and saved work under an authenticated quota. Owned naming projects and domain research use naming:read, generation and board edits use naming:write, reading design systems uses kits:read, and creating or remixing kits plus building shareable brand projects uses kits:write. API calls count against one account-wide monthly API quota shared by all keys, while generation separately spends AI credits for successfully persisted unique candidates. Manage keys at https://identityforge.io/account/api-keys.
After a successful local apply, the client sends one metadata-only completion request so aggregate builds can be counted. It includes the kit identifier plus the client name and version already present in every API request. It never sends the repository path or file contents, never changes the apply result, and can be disabled with IDENTITYFORGE_TELEMETRY=0.
Existing design-only keys are not silently upgraded. If a key reports that it is missing naming:read or naming:write, create a scoped key or run browser login again.
Docker
The MCP server also runs as a container over stdio:
docker build -t identityforge-mcp .
docker run -i --rm -e IDENTITYFORGE_API_KEY=ifk_… identityforge-mcpThe image contains no kit payloads. The key is optional: without one, the server still starts and fetches published Free kits from the Identity Forge platform API. Pro kits, saved work, and writes require an account key.
Links
Source and agent plugin: the public CLI and MCP implementation.
Kit gallery: browse every kit with live previews, authored-intent use-case filters, and search.
For agents: the full agent integration story.
API manifest and llms.txt.
Official MCP Registry record and Glama listing with independent build and security analysis.
If Identity Forge earns a place in your workflow, a GitHub star helps other builders find it.
License
MIT
Available Tools
61 toolsadd_brand_layerCompose a layer onto a brandA
Put one catalogue record onto a brand project alongside its design kit, so the choice is stored on the user's brand rather than living in this conversation. One tool for all three axes: pass axis to say which. The layers belong to the PROJECT and not to the kit, so swapping the kit later leaves them alone — that independence is the whole point of composing axes separately. The pin records the revision the record is at right now, which is what lets get_brand_layers later report that it moved instead of silently applying someone else's edit to the user's brand. recordId is the record's permanent id from list_image_directions, list_interface_styles or list_page_recipes, never a slug: slugs are mutable handles and a pin keyed on one could come to mean a different record. imageDirection and interfaceStyle hold ONE each, so composing a second is refused with 409 unless you pass replace: true — which is also how you accept a drifted revision after the user has seen what changed. Page recipes are a list and simply accumulate. A Pro record on a key without Pro is refused with 403 and an upgrade path; that is not a conflict and replace will not help. This overwrites live brand state without asking and mints a version recording that your key did it. Requires the kits:write scope.
| Name | Required | Description | Default |
|---|---|---|---|
| axis | Yes | Which axis this record belongs to. imageDirection and interfaceStyle hold one each; pageRecipe holds any number. | |
| replace | No | Replace what is already on a single-value axis, or accept a revision that has drifted. Ignored for pageRecipe, which is a list. Default false, so a clash is reported rather than overwritten. | |
| recordId | Yes | The record's permanent id (the `id` field), not its slug. From list_image_directions, list_interface_styles or list_page_recipes. | |
| projectId | Yes | Owned brand project id from list_brand_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description takes full responsibility and excels: it discloses destructive behavior ('overwrites live brand state without asking'), audit trail ('mints a version'), auth scope ('kits:write'), and error semantics (409, 403). This is exemplary transparency for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but every sentence earns its place: purpose, axis behavior, project/kit independence, pin rationale, recordId warning, conflict rules, 403 edge case, and side effects. It is front-loaded with the core action and contains no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex mutation tool with no annotations and no output schema, this description is remarkably complete. It covers purpose, usage, safety, error conditions, auth, and param semantics, even explaining upgrade paths and version minting – fully sufficient for safe and correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite 100% schema coverage, the description adds significant meaning: it explains why recordId must be a permanent id (slugs are mutable), how single-value axes conflict vs pageRecipe accumulating, and the purpose of replace for drifted revisions. This goes beyond schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Put one catalogue record onto a brand project alongside its design kit' – a specific verb, resource, and outcome. It explicitly says 'One tool for all three axes' and differentiates layer composition from siblings like get_brand_layers and remove_brand_layer.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit usage guidance: 'One tool for all three axes: pass axis to say which' and explains when to use replace (conflict or drifted revision) and when not to (Pro/403). It also references get_brand_layers to explain the pin behavior, giving clear context for when this tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_brand_variationAdd a brand variationA
Attach one brand proposal to a project: a kit plus an optional brand name, domain, label, and notes. Call it four or five times per project with deliberately contrasting kits, because a client choosing between similar directions cannot tell you much. The kit must be one you can resolve, meaning your own, a catalog kit, or another user's public kit, and a Pro catalog kit needs an entitled key. Variations become visible to the client only once you call share_brand_project. Requires the kits:write scope.
| Name | Required | Description | Default |
|---|---|---|---|
| label | No | Short label the client sees, e.g. 'Bold direction'. Helps them talk about the options. | |
| notes | No | Rationale for this direction, shown alongside it. | |
| domain | No | Proposed domain to display, e.g. 'example.com'. | |
| kitSlug | Yes | Slug of the kit this proposal shows. | |
| brandName | No | Proposed brand name to display with this direction. | |
| projectId | Yes | Owned brand project id from list_brand_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It reveals the dependency on kit resolution rules, the entitlement requirement for Pro catalog kits, the 'kits:write' OAuth scope, and that variations are hidden from the client until share_brand_project is called. This goes well beyond a basic 'adds a variation' statement.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, each earning its place: the first states the operation, the second gives usage guidance and rationale, the third covers prerequisites, visibility, and authorization. It is front-loaded with the core message and contains zero filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is highly complete for a creation tool: it specifies the action, when to call, prerequisites, visibility semantics, and required scope. The only gap is the lack of any mention of the return value or response structure, which is relevant since there is no output schema. Still, this is a minor omission given the otherwise thorough context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents each parameter. The description adds value by explaining the kit's resolvability requirement and how the optional fields (brandName, domain, label, notes) function as a coherent proposal set. It also hints at the usage pattern (four or five times with contrasting kits), enriching the meaning of label and notes.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Attach one brand proposal to a project') and enumerates the components (kit plus optional brand name, domain, label, notes). It distinguishes this from sibling tools like update_brand_variation, remove_brand_variation, and share_brand_project by focusing on the act of attaching a new variation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit usage guidance is provided: call it four or five times per project with deliberately contrasting kits, and the rationale for that approach. It also specifies prerequisites (kit must be resolvable, Pro catalog kits need an entitled key) and when variations become visible (only after calling share_brand_project), giving clear context for when to use this tool versus alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_name_candidatesPersist externally researched name candidatesA
Persist 1-50 names your own agent, another model, or manual research produced onto the durable project board, so a shortlist never lives only in the chat transcript. This is the free counterpart to generate_names: it stores names rather than authoring them, and spends no AI credits. Each item needs a caller-generated UUID, which makes retries safe. Sending identical data again returns the same row; reusing an id with changed data returns a conflict instead of silently overwriting. Requires the naming:write scope.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Owned naming project id from list_naming_projects. | |
| candidates | Yes | 1-50 candidates to persist. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses idempotency semantics ('identical data again returns the same row; reusing an id with changed data returns a conflict'), the required 'naming:write scope,' and that it 'spends no AI credits.' This is rich behavioral context beyond what annotations could provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four sentences, each adding value: purpose, relationship to generate_names, idempotency behavior, and auth requirement. There is no filler or repetition of schema fields, making it appropriately sized and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the tool's purpose, usage context, idempotency, and auth requirement, which is sufficient for an agent to select and invoke it. However, with no output schema, it could optionally elaborate on the success response format beyond conflict/duplicate cases, so I score 4 rather than 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds meaningful semantics for the candidateId parameter by explaining duplicate vs conflict behavior in concrete terms, which is not fully captured in the schema's brief idempotency note. This extra detail justifies a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'persist' and clearly identifies the resource ('names...onto the durable project board'). It distinguishes from sibling generate_names by stating it 'stores names rather than authoring them,' which satisfies sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly positions this tool as 'the free counterpart to generate_names,' clarifying when to use it (when names are already produced) versus when to use generate_names (authoring new names). This gives the agent clear guidance on selecting the correct tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apply_themeApply a theme to the current projectA
Write a design kit into a project on disk: DESIGN.md, a tokens file named for the chosen format, and identityforge.json, a stamp recording the applied kit and a hash of every file written. This is the only tool here that touches the filesystem. It reads the stamp before writing, so it can tell its own output from the user's work. A file that already exists but is not recorded in the stamp, or one whose content changed since it was written, is a CONFLICT: by default the tool then writes NOTHING, names every conflicting file, and returns an error, so a hand-written DESIGN.md survives. Files whose content already matches the kit are left untouched. Set preview to plan without writing anything at all, and force to overwrite conflicting files, which destroys their current content permanently with no recovery path. Everything is computed before the first write, so a failed fetch cannot half-apply. Call it once the user has settled on a kit; get_design_md and get_tokens inspect a kit without writing. The stamp also records the kit's permanent id and its version as the export reported them, which is what a later apply diffs against: re-applying tells you whether the kit itself moved to a new version, or whether only the rendered file changed. A version of null means the export did not report one, and must never be read as version 0. Free kits are public, and a Pro kit returns 403 unless the key is entitled.
| Name | Required | Description | Default |
|---|---|---|---|
| dir | No | Target directory to write into, absolute or relative to the server's working directory. Default: the MCP server's working directory. The stamp identityforge.json is written at its root. | |
| slug | Yes | Permanent id or slug of the kit to apply, from list_themes / search_themes. Prefer the id: it never moves, while a slug can be renamed and a retired slug keeps resolving through an alias. | |
| force | No | Apply despite conflicts. Default false. DESTRUCTIVE: it overwrites files this tool did not write or that were edited after it wrote them, their current content is gone permanently, and the result names each one. Only pass it after the user has seen the conflicting files and agreed to lose them. | |
| preview | No | Dry run. Default false. When true nothing is written at all, not even the stamp, and the result is the plan: which files would be created, which overwritten, which are already identical, and which conflict. Use it before applying into a project that may already have a DESIGN.md, and to show the user what would change. | |
| tokensEntry | No | Advisory note for the stamp: the project-relative path where the tokens file gets wired in, e.g. 'src/app/globals.css'. Recorded for the next agent, nothing is written to it. Carried forward from the previous stamp when omitted. | |
| tokensFormat | No | Token file format to write: dtcg (W3C JSON) | css (variables) | tailwind-v3 (config) | tailwind-v4 (@theme) | shadcn-registry. Default dtcg. Match it to the project's styling layer. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does so thoroughly: it discloses conflict detection and the write-nothing-on-conflict behavior, names the destructive consequences of force, explains preview as a no-write dry run, guarantees no partial application, and clarifies version null semantics and Pro kit 403 errors. This far exceeds the minimum required for behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but every sentence carries substantive behavioral information, and it is front-loaded with the core action and outputs. It could be improved by using bullet points or headings for conflict, preview, and stamp semantics, but the density is justified by the tool's complexity and safety implications.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity, the absence of annotations, and the absence of an output schema, the description is exceptionally complete. It covers what files are written, conflict handling, error responses, the preview plan, the force destructive path, atomicity, stamp behavior, version interpretation, and access restrictions. An agent has enough context to select and invoke this tool safely without further documentation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and each parameter already has a detailed description, so the baseline is 3. While the tool description adds conflict-related context around force and preview, these are largely repeated in the schema parameter descriptions. No parameter meaning is significantly enhanced beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description leads with a specific verb and resource: 'Write a design kit into a project on disk' and enumerates exactly what gets written (DESIGN.md, tokens file, identityforge.json). This clearly distinguishes it from siblings like get_design_md and get_tokens, which only inspect without writing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states 'This is the only tool here that touches the filesystem' and advises calling it 'once the user has settled on a kit', while naming the alternatives 'get_design_md and get_tokens inspect a kit without writing'. This gives clear when-to-use and alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_applied_themeHas the applied kit moved since this repo was built?A
Read the identityforge.json stamp in a project on disk and report what has moved since apply_theme wrote it. Takes no kit and no version: the stamp holds both, which is what makes this the tool to reach for when returning to a project rather than reconstructing the arguments for diff_kit_versions by hand. It reports THREE independent movements and never conflates them. kitMoved: the server's own version count differs, so the design itself changed and the brief is worth re-reading. documentMoved: the rendered DESIGN.md bytes differ, which a serializer change alone does to every kit at once and is not by itself a reason to touch code. contractMoved: designMdContract differs, so the document's SHAPE changed and a section was added, renamed or removed. Each is null rather than false when one side cannot answer, with a note saying which. When the kit did move and both versions are numbers, the diff_kit_versions result is included, so one call answers both what moved and how. It also hashes every artifact the stamp recorded against what is on disk, so a DESIGN.md edited by hand shows as modified before anything overwrites it. Read-only: it writes nothing and touches no file, so it is safe to call at the start of any session. Losing a key or hitting a Pro gate degrades it to a local-only report with a note rather than failing.
| Name | Required | Description | Default |
|---|---|---|---|
| dir | No | Project directory holding identityforge.json, absolute or relative to the server's working directory. Default: the MCP server's working directory. Same meaning as apply_theme's dir. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and exceeds it: it discloses read-only behavior, that it writes nothing and touches no file, the three independent movement types and their meanings, null-versus-false semantics, inclusion of diff results, artifact hashing, and graceful degradation on missing keys/Pro gates. This is far beyond typical transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Despite being long, every sentence earns its place: primary action, alternative justification, three-movement breakdown, null semantics, diff inclusion, hashing, safety, and degradation. The core purpose is front-loaded, and the density is warranted for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex tool with no output schema, the description fully explains return fields, edge cases (null values, missing keys, Pro gates), and practical implications. It makes the tool actionable without needing additional external knowledge, and it clearly separates concerns like serializer-only changes versus contract changes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already covers the only parameter (dir) with 100% coverage, including default and path meaning. The description adds context about the stamp holding kit/version, but does not add parameter-level syntax or format beyond the schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource ('Read the identityforge.json stamp in a project on disk and report what has moved') and immediately distinguishes the tool from diff_kit_versions by noting it takes no kit and no version. The title also reinforces the purpose as a question, making the tool's unique role clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says when to use this tool ('returning to a project') and names the alternative (diff_kit_versions), explaining why this avoids 'reconstructing the arguments' by hand. It also states it is safe to call at the start of any session, providing clear context for when it should be preferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_domainsCheck domain evidenceA
Check up to 20 bare domains and return four independent kinds of evidence: RDAP registration records via IANA bootstrap, live DNS, real-time Cloudflare Registrar availability with pricing, and optional search results showing who else already occupies the name. Each is reported separately rather than collapsed into one available or taken verdict, because a domain with no DNS can still be registered and parked. Results are a snapshot: they reserve nothing, and a domain can be taken between this call and checkout. Use search_name_evidence for broader name research that is not domain specific. Requires the naming:read scope.
| Name | Required | Description | Default |
|---|---|---|---|
| market | No | Market context for SERP results, e.g. Germany heating retail. | |
| domains | Yes | 1-20 bare domains including the TLD, e.g. 'example.com'. No scheme or path. | |
| language | No | Search language tag, e.g. de-DE. | |
| includeSerp | No | Default false. Enable for finalist collision research. | |
| includeRegistrar | No | Default true. Disable only when registrar checks are not needed. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It excels by explaining that evidence is reported independently rather than collapsed into a verdict, that lack of DNS does not mean unregistered, that results are a snapshot with no reservation, and that a domain can be taken between call and checkout. It also discloses the required naming:read scope, which is valuable beyond schema info.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact but information-dense. It front-loads the core purpose and scope ('up to 20 bare domains') and then packs essential caveats, alternatives, and auth requirements into every sentence without fluff or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the absence of an output schema and annotations, the description does an excellent job of setting expectations: it lists the four evidence sources, explains the separate reporting model, warns about snapshot semantics, names the auth scope, and points to the alternative tool. This is sufficient for an agent to decide when and how to invoke the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and each parameter already has a meaningful schema description. The tool description adds some context—e.g., 'optional search results showing who else already occupies the name' and 'requires the naming:read scope'—but it mostly reinforces what the schema states. Baseline 3 is appropriate because the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Check up to 20 bare domains and return four independent kinds of evidence.' It enumerates the exact evidence sources (RDAP, DNS, Cloudflare Registrar, optional search results) and explicitly distinguishes itself from the sibling tool search_name_evidence, making its purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage guidance: it is for checking specific domains, not for broader name research, and it explicitly directs users to search_name_evidence for non-domain-specific research. It also clarifies when to enable optional search results via includeSerp ('finalist collision research') and when registrar checks might be disabled.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_brand_projectCreate a brand projectA
Create the container that holds brand variations and the client share link. Do this once per client brief, then attach several directions with add_brand_variation and send the client a link with share_brand_project. Creating a project on its own shows the client nothing, so it is only the first of those three steps. Call list_brand_projects first to avoid making a second project for a client who already has one. Requires the kits:write scope.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Project name, usually the client or the product. | |
| brief | No | What is being built: audience, market, and the character the brand should have. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even without annotations, the description discloses key behavioral traits: it requires the 'kits:write' scope, it is non-idempotent (implied by 'avoid making a second project'), and it has no client-visible effect on its own. This goes beyond basic semantics and helps the agent understand side effects and prerequisites.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four sentences, each with a distinct purpose: core definition, workflow sequence, caveat about client visibility, and duplicate-avoidance guidance. No filler or redundancy; information is front-loaded with the primary action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool that is one step in a larger workflow, the description includes all necessary context: prerequisites, next steps, scope requirement, and the fact that the creation alone is insufficient. With only two parameters fully described in the schema and no output schema, the description covers the operational context comprehensively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides 100% description coverage for both parameters (name and brief). The tool description does not add additional parameter-level meaning beyond the schema, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Create' and resource 'container that holds brand variations and the client share link', which precisely defines the tool's role. It clearly distinguishes itself from siblings by framing it as the first of three steps (with add_brand_variation and share_brand_project), leaving no ambiguity about what this tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use it ('Do this once per client brief'), what to do next ('attach several directions with add_brand_variation and send the client a link with share_brand_project'), and a crucial precondition ('Call list_brand_projects first to avoid making a second project'). This is strong guidance with concrete alternatives and sequence.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_naming_projectCreate a naming projectA
Create one durable, project-owned naming board and return its id. Do this ONCE per real naming brief, never once per generation run: every other naming tool takes the resulting projectId, and the board persists the candidate kanban, research evidence, and generation ledger across sessions so the shortlist never lives only in chat. Call list_naming_projects first and reuse an existing board rather than creating a near-duplicate. Write the real brief into description, because generation quality depends on it. Requires the naming:write scope; creating a board spends no AI credits.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Human-readable project name, e.g. the product or client. | |
| description | No | Product, audience, market, constraints, and desired character. | |
| selectedTlds | No | TLDs to research, default com/io/co. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even without annotations, the description fully discloses behavioral traits: the created board is durable, persists kanban/research/ledger across sessions, returns an id, and requires naming:write scope while spending no AI credits. This goes well beyond the structured schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence earns its place: purpose, usage guardrail, persistence semantics, prerequisite call, parameter guidance, and side effects. It is front-loaded with the core action and returns an id immediately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity, the description covers creation, reuse, parameter relevance, auth scope, cost behavior, and persistence. It also discloses the return value (id), compensating for the lack of an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for all three parameters. The description adds extra meaning by emphasizing that the description field should contain the real brief because generation quality depends on it, and by clarifying the default TLDs indirectly. This adds value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Create one durable, project-owned naming board and return its id.' It clearly distinguishes this tool from siblings like list_naming_projects and generate_names by focusing on the creation of a persistent project entity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance is given: call list_naming_projects first, reuse existing boards, create only once per real naming brief, and write the full brief into the description field. It also states when not to use it ('never once per generation run') and mentions the required naming:write scope.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_themeCreate a design kit (theme)A
Author a new design kit, either from scratch by passing a kit JSON or by forking a published catalog kit with base and applying overrides for tokens, colors, fonts, and facet presets. Use base whenever a catalog kit is close to what you want, since a fork inherits a complete, coherent system and you only state the differences. Authoring from scratch means supplying the whole thing. The result is always PRIVATE and visible only to your key until you publish it from the web Studio; this tool cannot publish. Forking a Pro catalog kit needs an entitled key. Use remix_theme instead when you want several quick variations off one direction. Requires the kits:write scope, so regenerate your key with identityforge login if you get a 403 naming it.
| Name | Required | Description | Default |
|---|---|---|---|
| kit | No | A kit JSON to author from scratch (merged over a renderable skeleton). Omit when `base` is set. | |
| base | No | Catalog slug to fork (omit to author from `kit`). | |
| name | Yes | Display name for the new kit. | |
| overrides | No | Mix-and-match overrides applied on top of the base kit. Structure-level composition is not available via the API. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does so admirably. It discloses that the result is always PRIVATE, that this tool cannot publish, that forking Pro kits needs an entitled key, and that it requires the kits:write scope, including a hint about regenerating the key on a 403. This goes far beyond what annotations would typically provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a dense paragraph of five sentences. Every sentence carries substantive guidance (mode selection, fork vs. scratch, privacy, entitlement, alternative tool, auth scope). It is longer than the two-sentence ideal but justified by tool complexity; no filler or redundancy is evident.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (4 params, nested objects, no annotations, no output schema), the description covers all essential context: purpose, two usage modes, when to choose each, privacy/publishing behavior, Pro entitlement, auth scope, and a sibling alternative. It is complete enough for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schemas already contain detailed descriptions, so the baseline is 3. The description adds meaningful guidance above that by explaining the relationship between `base` and `overrides` (fork inherits a coherent system, you only state differences) and the privacy implication (always PRIVATE). This lifts it above baseline, though the schema already does most of the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource ('Author a new design kit') and clearly distinguishes two modes (from scratch via `kit` or forking via `base`). It also differentiates from sibling `remix_theme`, explicitly saying to use that for quick variations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use guidance: 'Use `base` whenever a catalog kit is close to what you want' and 'Use remix_theme instead when you want several quick variations off one direction.' Also clarifies the trade-off between forking and authoring from scratch, plus the privacy/publish limitation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_themeDelete a saved design kitA
Permanently delete one of your saved design kits. This cannot be undone, so pass confirm: true only after you are sure. A kit referenced by a brand project is refused with 409 kit_in_use; retire or repoint those references before trying again. Requires the kits:write scope.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Permanent id or slug of a kit saved under your own key. | |
| confirm | Yes | Must be exactly true. Required because deletion is permanent. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It transparently discloses the permanent destructive nature, the hard requirement for confirm: true, the 409 conflict behavior, and the required OAuth scope. This gives the agent a complete picture of consequences and preconditions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each earning its place: purpose, confirmation requirement, and error scenario/auth scope. It is front-loaded with the verb and object, making it immediately clear what the tool does. No redundant or generic filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive delete tool with no output schema and no annotations, the description covers all essential context: permanence, confirm flag, conflict resolution, and auth. It is sufficiently complete for an agent to select and invoke the tool safely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value by emphasizing that confirm must be exactly true and why, which reinforces the schema. It does not need to add syntax details since the schema already documents both parameters well, but the extra cautionary note justifies a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Permanently delete') and the resource ('one of your saved design kits'). It distinguishes this from sibling tools by specifying the destructive nature and requiring confirmation, which sets it apart from update/remix tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context on when to use the tool (deleting a kit) and prerequisites (kits:write scope, confirm: true). It also explains a key exclusion: kits referenced by a brand project are refused, prompting the user to retire references first. However, it does not explicitly name alternatives or broader when-not-to-use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
diff_brand_project_versionsDiff two brand project versionsA
What changed between two versions of a brand project. Pass from alone to compare against the current version. Owner-scoped, so nothing is redacted: you are reading your own brand. Variation edits appear here as variations.<id>.<field> rather than as a wholesale swap, because a variation is identified by id and can be followed across a reorder. Needs kits:read.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | Upper bound. Omit to compare against the project's current version. | |
| from | No | Lower bound. Must be lower than the upper bound. | |
| projectId | Yes | Owned brand project id from list_brand_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does well: it explains that the tool is owner-scoped and nothing is redacted, and details how variation edits are represented ('variations.<id>.<field>' rather than wholesale swap). It also mentions the kits:read permission. This adds meaningful behavioral context beyond the basic purpose.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-organized: it opens with the core purpose, then gives usage guidance, then adds scope and variation-format context, and finally states the required permission. Every sentence earns its place without redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the key aspects needed for selection and invocation: what it does, how to use the from parameter, owner-scoping, variation edit format, and required permission. It lacks a full description of the overall output structure, but given the absence of an output schema, the provided hints are reasonably sufficient for a diff tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already covers all 3 parameters with 100% description coverage. The tool description adds extra meaning, particularly the 'Pass `from` alone' behavior for comparing against the current version, which clarifies the interplay between `from` and `to`. This goes beyond the schema's individual field descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'What changed between two versions of a brand project.' It specifies the resource (brand project versions) and the action (diff), and distinguishes itself from sibling tools like diff_kit_versions and get_brand_project_version by focusing on brand projects and comparing two versions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a clear usage pattern: 'Pass `from` alone to compare against the current version.' This tells the agent exactly when and how to use the tool. It also mentions scope ('Owner-scoped') and the required permission ('Needs kits:read'). It does not explicitly name alternatives, but the context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
diff_kit_versionsDiff two kit versionsA
What changed between two versions of a kit: a list of paths with the old and new value, the CSS custom property a token change drives, and a mechanical summary. This is the tool for taking a brand change into a codebase, because it tells you the handful of things to update rather than making you re-read a whole DESIGN.md. Pass from alone to compare against the current version, which is the usual question: from is the version your repo recorded in identityforge.json. Pass both to pin a range. It reports what moved and does not judge how big the change is; whether a token shift matters to your UI is your call, not a number we invent. For a Pro kit you are not entitled to, every change comes back with redacted: true carrying the path, kind and CSS variable but no before or after, and redactedChanges counts them, so you can still see the shape of the change and know exactly what is withheld. Needs kits:read.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | Upper bound. Omit to compare against the kit's current version, which is what you want when asking whether it moved since you built. | |
| from | No | Lower bound. Omit to diff the current version against the one before it. Must be lower than the upper bound. | |
| slug | Yes | Permanent kit id or slug. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and excels. It discloses output structure, the effect of omitting `from` or `to`, that it reports mechanical changes without judging their significance, and detailed redaction behavior for unauthorized Pro kits (including the exact shape of redacted objects and counts). It even mentions the required `kits:read` permission. This is exemplary transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than average, but every sentence earns its place: it front-loads the core result, then guides usage, then covers edge cases and permissions. There is zero fluff or repetition; density of useful information is high.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema and no annotations, the description successfully covers purpose, output shape, usage patterns, permission requirements, and a nuanced redaction case. An agent has enough context to decide when to call it and what to expect from the response, even without an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds significant value beyond the schema. It explains the semantic distinction between passing `from` alone versus both bounds, ties `from` to the version recorded in identityforge.json, and explains how redaction affects parameter output. This goes beyond the schema's terse parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a concrete, specific verb ('diff') and resource ('two versions of a kit'), then enumerates exactly what the output contains: paths with old/new values, CSS custom properties, and a mechanical summary. It clearly distinguishes itself from siblings like diff_brand_project_versions by focusing on kits and even contrasts with reading DESIGN.md. This is a model of purpose clarity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'This is the tool for taking a brand change into a codebase' and explains the common pattern of passing `from` alone to compare against the current version. It also warns against relying on re-reading DESIGN.md as an alternative. However, it does not name specific sibling tools (e.g., get_kit_version, diff_brand_project_versions) or explicitly say 'use X instead,' so it stops short of full alternative differentiation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_brandGet the whole brand as one documentA
The brand as ONE document, ready to build from: its design kit's DESIGN.md with every catalogue layer the user pinned written into it. Use this instead of assembling get_design_md plus get_image_direction plus get_interface_style plus get_page_recipe yourself, because merging those four is the part you cannot do correctly — when an interface style asks for translucent panels and the kit specifies flat opaque cards, only we know which wins. The rule is stated in the document itself: the kit owns IDENTITY (its colour tokens, typefaces, spacing and motifs, which nothing below overrides) and a layer owns APPLICATION (what a panel is made of, how a photograph is treated, how a page orders its argument). Follow it rather than re-deciding it, and where a layer would need a kit token changed, keep the token and say so. A brand with nothing pinned returns its kit's DESIGN.md unchanged, which is the honest answer and not an error. A layer this key cannot open is NAMED with its judgment page and an upgrade path, and only its implementation is withheld: build what the kit and the present layers give you and do not invent the missing one, because a guessed implementation looks finished and is not. A brand that has not chosen a kit answers 409 — there is no design system yet, and the placeholder the workspace shows is nobody's choice. Owner-scoped, so the key must own the project; read-only, mints no version, writes nothing. Requires the kits:read scope.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Owned brand project id from list_brand_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses read-only behavior ('read-only, mints no version, writes nothing'), required scopes ('kits:read'), owner-scoping, conflict-resolution rules, and specific non-error outcomes. This gives agents a strong behavioral model without needing external annotation signals.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core value proposition and uses a single dense paragraph. Every sentence conveys meaningful information, but the length is slightly over-verbose for an agent-facing description, with phrases like 'which is the honest answer and not an error' adding nuance but not essential structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema and no annotations, the description is remarkably complete. It explains what the returned document contains, how conflicts are resolved, what happens in edge cases, error conditions (409), auth requirements, and side effects. This is a fully specified behavior description for a complex tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers the single parameter projectId with a description ('Owned brand project id from list_brand_projects'), and schema coverage is 100%. The description adds owner-scoping context, but this is already implied by 'Owned' in the schema and is more of an access requirement than a parameter semantic. Thus, the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: returning the brand as one ready-to-build document, specifically the kit's DESIGN.md with pinned layers written in. It distinguishes itself from sibling tools by explicitly naming get_design_md, get_image_direction, get_interface_style, and get_page_recipe and explaining why using them separately is inferior.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use guidance: 'Use this instead of assembling get_design_md plus get_image_direction plus get_interface_style plus get_page_recipe yourself.' It also covers edge cases—no pinned layers returns the kit's DESIGN.md, a locked layer is named with an upgrade path, and no chosen kit returns 409—so agents know when the tool is appropriate and what to expect.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_mockupsGenerate brand mockupsA
Queue photographic mockups for selected variations and template scenes. This spends one AI credit for every variation and scene combination after the server resolves the selected kits; failed enqueue attempts are refunded. The response contains the job id and polling URL. Requires kits:write.
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | Template and scene pairs to render for every variation. | |
| projectId | Yes | Owned brand project id from list_brand_projects. | |
| variationIds | Yes | Variation ids from get_brand_project. | |
| idempotencyKey | No | Stable key for a retry that must not spend credits twice. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description takes full responsibility for behavioral disclosure. It transparently covers credit consumption per variation/scene combination, refunds on failed enqueues, the async queue behavior, the response containing job id and polling URL, and the permission requirement. This exceeds typical disclosure levels.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tightly written sentences front-load the core action, then efficiently cover cost, failure handling, response contents, and required permission. Every sentence adds value with zero wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the essential aspects for a queueing tool: what it does, cost, failure refund, response content, and permission. It doesn't elaborate on polling mechanics, but the sibling get_mockup_job and the polling URL hint provide sufficient context. Given no output schema or annotations, this is reasonably complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides 100% parameter description coverage, so the baseline is 3. The description adds value by explaining the cost model tied to the variation/scene combinations and the async queue semantics, which enriches understanding of how the parameters relate to behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Queue photographic mockups for selected variations and template scenes.' This clearly distinguishes the tool from siblings like list_mockup_jobs and get_mockup_job, which list or retrieve mockup jobs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for use: it queues mockups, explains the credit cost model, and notes the kits:write permission requirement. It doesn't explicitly name alternative tools or say when not to use it, but the context is strong enough to imply the primary use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_namesGenerate and persist brand namesA
Generate brand names with Identity Forge's own operator-owned model and persist them to the project board's generated column with full model, prompt-version, and credit provenance. SPENDS the key owner's AI credits, one per uniquely persisted name, charged only after the rows commit, so a failed run costs nothing. Always pass a stable idempotencyKey so a retry after a timeout cannot bill twice. Use it when you want Identity Forge to author the names; if your own agent or an offline process produced them, use add_name_candidates instead, which is free. Requires the naming:write scope.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | How many names to generate, 1-30. Each uniquely persisted name spends one AI credit. | |
| projectId | Yes | Owned naming project id from list_naming_projects. | |
| recipeIds | Yes | 1-8 recipe ids returned by list_naming_recipes. | |
| description | Yes | The specific brief for this run: product, audience, market, and desired character. Output quality tracks this directly, so do not pass a bare product name. | |
| styleOptions | No | Optional constraints on the shape of generated names. | |
| idempotencyKey | No | Stable unique key for this exact request. Reusing it returns the original result instead of generating and charging again. Always set it. | |
| frequencyPenalty | No | Model frequency penalty, -2 to 2. Raise it when a previous run returned repetitive stems. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full transparency burden. It goes beyond a simple mutation warning by detailing the credit cost model ('one per uniquely persisted name, charged only after the rows commit, so a failed run costs nothing'), the idempotency guarantee, and the provenance recording. This gives the agent critical operational knowledge not available in structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single dense paragraph with every sentence contributing essential information: purpose, persistence, costs, idempotency, alternative, and scope. There is no repetition of schema content and no fluff. It is front-loaded with the tool's core action and then logically covers side effects and usage nuances.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 7 parameters, nested objects, and no output schema, the description covers most critical context: cost behavior, idempotency, persistence, provenance, and alternative tools. The only minor gap is that it does not describe the return value or response shape, which would normally be needed with no output schema, but the mention of 'returns the original result' partially implies the behavior. Overall, it is very complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline of 3 applies. The description adds contextual guidance around `idempotencyKey` ('Always pass a stable idempotencyKey so a retry after a timeout cannot bill twice') and reinforces that `count` corresponds to persisted-name credits, but most parameter-level semantics are already in the schema. It does not meaningfully compensate beyond that.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb+resource+outcome: 'Generate brand names... and persist them to the project board's generated column with full model, prompt-version, and credit provenance.' It also distinguishes itself from the sibling `add_name_candidates` by noting the alternative tool is for externally produced names, so there is no ambiguity about its role.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit usage guidance is provided: 'Use it when you want Identity Forge to author the names; if your own agent or an offline process produced them, use add_name_candidates instead, which is free.' This names the exact alternative tool and gives a clear decision criterion. It also notes the required `naming:write` scope, which helps the agent determine prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_brand_layersRead a brand's compositionA
What a brand project is composed of on top of its design kit: its image direction, its interface style, and its page recipes. Read this BEFORE changing any of them, because it is the only place that tells you what the user already chose and whether it still says what it said. Every reference resolves to the revision the catalogue serves now and carries both numbers — revision is current, chosenRevision is what the project pinned — and drift appears only when they differ, carrying the author's note for what moved. meta.drifted counts them, so a brand with nothing to report answers 0 and you can stop. A record withdrawn from the catalogue since it was pinned comes back with resolved: false rather than vanishing, because a brand must not quietly forget what it points at, and a Pro layer this key cannot open still returns its name, tier and revision with locked: true. links.preview is that exact composition rendered as an image, which is the one thing you can put in front of a person who is not going to read a JSON object. Reading changes nothing: it mints no version and never moves a pin, so accepting a drifted revision stays a decision the user makes through add_brand_layer. Requires the kits:read scope.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Owned brand project id from list_brand_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses read-only side effects ('it mints no version and never moves a pin'), field semantics (revision vs chosenRevision, drift, resolved:false, locked:true), the meaning of meta.drifted, and the required kits:read scope. This is exceptionally transparent for a read operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Although longer than average, every sentence contributes distinct, high-value information: purpose, usage timing, field behavior, edge cases, preview link, safety guarantees, and authentication requirements. It is front-loaded with a clear definition and wastes no words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotations, the description thoroughly explains the return values (revision, chosenRevision, drift, meta.drifted, resolved, locked, links.preview), edge cases, side effects, and auth. It also references the sibling add_brand_layer for mutation, making it complete for an agent to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter, projectId, is fully described in the schema as 'Owned brand project id from list_brand_projects.' The description adds no further parameter-specific detail, but with 100% schema coverage this is acceptable. The baseline of 3 applies because the schema already does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific definition: 'What a brand project is composed of on top of its design kit: its image direction, its interface style, and its page recipes.' The verb 'Read' is clear and the resource is unambiguous. It also distinguishes itself from mutating siblings like add_brand_layer and remove_brand_layer by framing itself as the read-before-change tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs 'Read this BEFORE changing any of them' and explains it is the only place to see what the user chose and whether drift exists. It also tells the agent when to stop ('a brand with nothing to report answers 0 and you can stop') and points to add_brand_layer as the decision point for accepting a drifted revision. This is strong when-to-use guidance with alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_brand_projectRead one brand projectA
Read one board in full: every variation with its kit, brand name, domain, label and notes, plus the state of the client share and a URL for each direction. list_brand_projects gives you summaries and a variation COUNT; this is how you see what is actually on the board. Use it to check your own work after attaching variations, to answer 'what did we send them' without keeping notes of your own, and to read the share state before you change it — whether a link exists, whether it is still serving, whether it has a password, and how many times the client opened it. A project that is not yours, and an id that could never be one, both answer 404 alike, so this cannot be used to find out what exists for somebody else. Read-only and free. Requires the kits:read scope.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Owned brand project id from list_brand_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that the operation is read-only, requires the kits:read scope, and returns 404 identically for nonexistent and non-owned projects, preventing existence probing. It also details the exact data returned, including share state fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise despite its length; each sentence serves a purpose. It front-loads the core purpose, then contrasts with a sibling, lists use cases, explains security behavior, and ends with scope/read-only note. No redundant phrases.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description sufficiently explains return contents and behavior. It also covers prerequisites (kits:read scope), ownership constraints, and use cases, making it fully self-contained for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers 100% with a description 'Owned brand project id from list_brand_projects.' The tool description reinforces the ownership restriction but does not add new parameter-specific details beyond the schema. The baseline for full schema coverage is 3, and no extra syntactic or format guidance is provided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool reads one board in full, enumerating contents (variations, kits, brand name, domain, label, notes, share state, URLs). It explicitly distinguishes itself from list_brand_projects, which gives summaries and counts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides specific use cases: checking own work after attaching variations, answering 'what did we send them', and reading share state before changing it. It also explicitly names the alternative (list_brand_projects) and notes the tool returns 404 for non-owned projects, clarifying when not to use it for discovery.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_brand_project_versionRead one stored brand project versionA
The full snapshot a given version of a brand project recorded. Owner-scoped, like the rest of the brand-project surface. A brand snapshot references its kit rather than embedding it, so this never hands back a Pro kit's tokens by another door. Needs kits:read.
| Name | Required | Description | Default |
|---|---|---|---|
| version | Yes | Version number from list_brand_project_versions. | |
| projectId | Yes | Owned brand project id from list_brand_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the transparency burden and does well: it discloses owner-scoping, the required 'kits:read' permission, and a security property (never hands back a Pro kit's tokens by another door). It doesn't cover output shape or errors, but for a read tool this is substantive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is fairly compact (four sentences), but the opening sentence is awkwardly phrased and the 'Needs kits:read' note feels appended. All sentences contribute information, yet the structure could be smoother.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read operation with two well-documented parameters and no output schema, the description covers purpose, scope, security, and permission. It lacks explicit return-format detail, but that is not critical here given the tool's simplicity and the schema's richness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and each parameter's description already provides source references (e.g., 'from list_brand_projects'), so the description adds no extra parameter-level meaning. Baseline 3 is appropriate as the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The title states 'Read one stored brand project version' and the description says 'The full snapshot a given version of a brand project recorded,' making the resource and action clear. It distinguishes from siblings by emphasizing 'full snapshot' and the kit-referencing behavior, though the first sentence is grammatically awkward.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides ownership context ('Owner-scoped') and implies usage for fetching a specific version's snapshot, but it lacks explicit guidance on when to use this tool versus list_brand_project_versions or diff_brand_project_versions. No alternatives or exclusions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_design_mdGet DESIGN.md for a themeA
Fetch the complete DESIGN.md brief for one design kit (theme) by slug: the palette in prose, typography, layout and surface rules, elevation and shape, distinctive motifs, iconography, imagery direction, and explicit do's and don'ts. This is the document you design from. Read it before implementing a kit, or when the user wants to review a direction before committing to it. Read-only: it returns the text and writes nothing to disk (apply_theme is the tool that writes it into a project). Free kits are public; a Pro kit returns 403 with an upgrade path unless the key is entitled, without leaking the brief.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Permanent id or slug of the kit, from list_themes / search_themes. Prefer the id: it never moves, while a slug can be renamed and a retired slug keeps resolving through an alias. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses behavior: read-only, writes nothing to disk, returns the text. It also explains the 403 response for entitled Pro kits without leaking the brief, covering error and security behavior comprehensively.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence earns its place: content overview, usage context, read-only guarantee, and auth behavior. It is logically structured and free of redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter fetch tool, this description covers the document's contents, when to use it, side effects (none), and auth/error behavior. No critical context is missing, even in the absence of an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides 100% coverage for the single parameter, including detailed guidance on slug vs id. The tool description adds no additional parameter semantics, and its 'by slug' phrasing is slightly narrower than the schema's id-or-slug, but this does not reduce the baseline score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it fetches the complete DESIGN.md brief for a design kit by slug, enumerating the document's contents. It distinguishes itself from sibling writer tools like apply_theme and other get_* tools by positioning DESIGN.md as the design source document.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use the tool: 'Read it before implementing a kit, or when the user wants to review a direction before committing to it.' It also names apply_theme as the alternative that writes, providing a clear when-not-to-use signal.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_image_directionGet an image directionA
Retrieve one image direction's full implementation export, as Markdown for reading and briefing or JSON for programmatic use. This is what you follow when generating, sourcing, or art-directing imagery for the project, and it pairs with the design kit rather than replacing any of it. Read-only: it returns the text and writes nothing to disk. Free records are public; a Pro record returns 403 with an upgrade path unless the key is entitled, without leaking the payload.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Opaque id or slug of the record, from list_image_directions. Either addresses it directly. The id never changes; the slug is an editorial handle that can be renamed, and unlike a kit slug it has no alias fallback, so store the id for any reference you keep. | |
| format | No | Export representation: markdown (default) or json. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description transparently discloses read-only behavior ('writes nothing to disk'), access control ('Free records are public; a Pro record returns 403'), and error handling without leaking payload. This exceeds the typical level of behavioral detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: it opens with the core action, then usage context, then safety/auth details. Each sentence adds distinct information, with no redundant filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter tool with no output schema, the description covers what the tool does, how to use it, its output formats, and its safety/auth profile. It gives an agent enough to invoke it correctly without further research.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides full parameter descriptions (100% coverage), so the description need not repeat them. It adds semantic value by mapping output formats to use cases: 'Markdown for reading and briefing or JSON for programmatic use,' which helps agents select the right format.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves one image direction's full implementation export, with a specific verb ('Retrieve') and resource. It distinguishes from listing siblings by specifying 'one' and the export format options.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage context: 'This is what you follow when generating, sourcing, or art-directing imagery for the project.' It also clarifies it pairs with the design kit rather than replacing it, but does not explicitly name alternative tools or exclusions, so it stops short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_interface_styleGet an interface styleA
Retrieve one interface style's full implementation export, as Markdown for reading or JSON for programmatic use. The export holds render-grammar rules only, so combine it with a design kit's tokens, typography, motifs, and brand rules; on its own it will not give the UI an identity. Read-only: it returns the text and writes nothing to disk. Free records are public; a Pro record returns 403 with an upgrade path unless the key is entitled, without leaking the payload.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Opaque id or slug of the record, from list_interface_styles. Either addresses it directly. The id never changes; the slug is an editorial handle that can be renamed, and unlike a kit slug it has no alias fallback, so store the id for any reference you keep. | |
| format | No | Export representation: markdown (default) or json. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It explicitly states 'Read-only: it returns the text and writes nothing to disk' and details the 403 upgrade-path behavior for Pro records without leaking the payload. This is unusually transparent and safety-relevant.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences, each earning their place: the action and formats, the conceptual caveat about needing a design kit, and the auth/403 behavior. The core purpose is front-loaded with no redundant filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter retrieval tool with no output schema, the description covers purpose, formats, the content caveat, read-only safety, and error behavior. It does not specify the exact JSON/Markdown structure, but the schema and format enum make this adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds context that the export contains only render-grammar rules and that Markdown is for reading while JSON is for programmatic use, but it does not materially extend the already-detailed schema descriptions of 'slug' or 'format'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb ('Retrieve') and resource ('one interface style's full implementation export'), names the two formats (Markdown/JSON), and clarifies that the export contains only render-grammar rules. This clearly distinguishes it from listing tools and design-kit tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear context: use this for the implementation export, combine it with a design kit's tokens/typography/motifs/brand rules, and notes the read-only, entitlement behavior. It does not explicitly name alternative sibling tools like get_design_md or get_tokens, so it stops short of a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_kit_history_eventRead the kit as it stood at one history entryA
The full kit recorded at one line of the ledger, which is what makes the timeline useful rather than decorative: with it you can diff a past state against the current kit, or PATCH the payload back through update_theme to restore it. The response is a whole design kit, so it is large — call list_kit_history first and fetch only the entry you want. Knowing an event id is never sufficient on its own: the event must be yours AND on a kit you still own, and either test failing answers 404 identically, so a 404 here does not tell you which of the two it was. Needs kits:read.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Permanent kit id or slug of a kit you own. | |
| eventId | Yes | Entry id from list_kit_history, not a version number. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It reveals the response is a large whole design kit, requires kits:read permission, and that a 404 is ambiguous (event not yours vs. kit not owned). These are non-obvious behavioral traits that help the agent anticipate outcomes and avoid misdiagnosis.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph with multiple clauses, but every sentence earns its place. It is front-loaded with the core purpose, then provides use cases, usage prerequisites, and error semantics. Slightly verbose with phrases like 'rather than decorative,' but overall appropriately sized for the complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has only two parameters, no output schema, and no annotations, the description is exceptionally complete. It covers purpose, usage flow, auth requirements, result size, and ambiguous error behavior. The agent knows exactly what to expect and how to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already has 100% coverage for slug and eventId, providing baseline 3. The description adds meaning beyond the schema: eventId comes specifically from list_kit_history (not a version number, as also reiterated), and both parameters must satisfy ownership conditions. It also clarifies the 404 ambiguity tied to these parameters, adding semantic depth.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the tool reads a kit as it stood at a specific history entry, using a ledger metaphor. It distinguishes itself from siblings like list_kit_history (which lists entries) and update_theme (which changes state) by emphasizing the point-in-time snapshot purpose and use cases like diffing and restoring.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear when-to-use guidance: call list_kit_history first, then fetch only the desired entry. It also explains what not to assume (event id alone is insufficient) and provides an alternative use case (PATCH payload through update_theme to restore). This is explicit and practical.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_kit_versionRead one stored kit versionA
The full snapshot a given version recorded, as it was at that moment. Reach for this when you need the old values themselves, for example to see what a token was before an edit replaced it; diff_kit_versions is the cheaper answer when you only need to know what moved. The response is a whole design kit, so it is large. A version number is permanent: version 3 is version 3 forever. This returns the entire payload, so it is gated exactly like an export, and a Pro kit without an entitled key answers 403 rather than a redacted body. Needs kits:read.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Permanent kit id or slug. | |
| version | Yes | Version number from list_kit_versions. Positive integer; version 0 is never a stored row, it is the marker for a kit that has never been versioned. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully carries the burden of behavioral disclosure. It reveals that the response is large, that version numbers are immutable, that the tool returns the entire payload, and that it is gated like an export (403 for unentitled Pro kits). It also states the required scope ('Needs kits:read'). This is rich, non-obvious behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four sentences, each conveying essential information without redundancy. It front-loads the core purpose, then provides usage guidance and critical behavioral notes in a logical flow. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, the description is complete enough: it explains response size, permissions, gating behavior, and the distinction from diff_kit_versions. Users can accurately predict what the tool will do and what constraints apply.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both slug and version having detailed descriptions. The tool description adds a small note about version permanence, but the schema already explains version 0 and positive integers. Since the schema does the heavy lifting, a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as retrieving the full snapshot of a specific stored kit version, using specific language like 'full snapshot' and 'as it was at that moment.' It explicitly distinguishes itself from diff_kit_versions, which addresses a different need, so it is well-differentiated from siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states exactly when to use this tool ('when you need the old values themselves') and when to prefer an alternative ('diff_kit_versions is the cheaper answer when you only need to know what moved'). It also provides context about size and gating, which helps decide when to invoke it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_mockup_jobGet a brand mockup jobA
Poll one mockup job in its project for status, completed count, errors, and result URLs. Read-only. Requires kits:read.
| Name | Required | Description | Default |
|---|---|---|---|
| jobId | Yes | Job id from generate_mockups or list_mockup_jobs. | |
| projectId | Yes | Owned brand project id from list_brand_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It explicitly states 'Read-only' and 'Requires kits:read', which conveys the safety profile and auth requirement. It also enumerates return fields (status, completed count, errors, result URLs), giving agents a clear picture of what to expect. It lacks details on error behavior or rate limits, but for a simple read operation this is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the action and return fields, followed by a terse note on read-only and permission. Every word earns its place; no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-resource read tool, the description covers the essentials: what it does, what it returns, and its permissions. With no output schema, the description's mention of status, count, errors, and URLs compensates well. It could add context about typical usage after generate_mockups, but the parameter schema already provides that linkage, so the overall completion is strong.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and both parameters have rich descriptions in the schema (jobId from generate_mockups or list_mockup_jobs; projectId from list_brand_projects). The tool description itself adds no parameter-specific meaning, so the baseline of 3 applies as the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Poll') and resource ('one mockup job in its project'), clearly stating what it returns (status, completed count, errors, result URLs). This distinguishes it from siblings like list_mockup_jobs (lists many) and generate_mockups (creates jobs).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context on when to use this tool: to poll a single mockup job for status and results. It does not explicitly name alternatives or exclusions, but the 'Poll one mockup job' phrasing implies usage after job creation, and the read-only nature is stated. Missing an explicit contrast with list_mockup_jobs, but context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_naming_research_contextPrepare a naming research handoffA
Load everything you need to plan naming research in one call: the project brief, up to 100 candidates with the evidence already attached to them, which factual checks are available, workflow guidance, and a template for handing bounded questions to sub-tasks. Call it before orchestrating substantial research so you do not re-run checks that already exist on the board. It deliberately does not rank candidates, score them, or tell you which model to delegate to, because that judgement stays with you. Read-only and free. Requires the naming:read scope.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Owned naming project id from list_naming_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full transparency burden. It clearly states side-effect and access characteristics: 'Read-only and free' and 'Requires the naming:read scope.' It also discloses behavioral boundaries, such as not ranking or scoring candidates, and describes the extent of returned data (up to 100 candidates with evidence). This exceeds what is typical and gives the agent a clear behavioral model.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four sentences long but every sentence earns its place: the first enumerates the payload, the second gives timing guidance, the third sets expectations about non-behaviors, and the fourth covers access and safety. It is well-structured, front-loaded, and free of filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter, read-only context tool with no output schema, this description is remarkably complete. It covers what is returned, when to call it, what it avoids, access requirements, and linkage to existing board data. An agent has enough information to invoke it appropriately and anticipate its behavior without surprises.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers 100% of the single parameter with a clear description ('Owned naming project id from list_naming_projects') and a UUID format. The tool description adds useful context about what the parameter is used for (loading project brief, candidates, etc.), but it does not add new parameter-level semantics beyond the schema. Thus the schema-coverage baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific, action-oriented summary: 'Load everything you need to plan naming research in one call,' then enumerates concrete deliverables (project brief, candidates with evidence, available checks, workflow guidance, template). It clearly distinguishes itself from siblings like list_naming_projects and generate_names by focusing on consolidating research context rather than creating or listing entities.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly tells the agent when to call it: 'Call it before orchestrating substantial research so you do not re-run checks that already exist on the board.' It also clarifies what the tool intentionally does not do (rank, score, or choose delegation model), preventing misuse. This is strong, actionable guidance for selecting this tool over alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_page_recipeGet a page recipeA
Retrieve one page recipe's full implementation export, as Markdown for reading or JSON for programmatic use. This is what you build the page's structure and argument from, and it pairs with a design kit, which still supplies the visual and interaction rules. Read-only: it returns the text and writes nothing to disk. Free records are public; a Pro record returns 403 with an upgrade path unless the key is entitled, without leaking the payload.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Opaque id or slug of the record, from list_page_recipes. Either addresses it directly. The id never changes; the slug is an editorial handle that can be renamed, and unlike a kit slug it has no alias fallback, so store the id for any reference you keep. | |
| format | No | Export representation: markdown (default) or json. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does so admirably. It explicitly states 'Read-only: it returns the text and writes nothing to disk,' and discloses access-control behavior: free records are public, while Pro records return 403 with an upgrade path without leaking the payload.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, front-loaded with the primary action, and every sentence earns its place by adding either purpose, usage context, or critical behavioral/access details. There is no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has only 2 parameters, no output schema, and no annotations, so the description carries more weight. It explains the return type (full implementation export), format options, and access behavior. It could go further by describing the structure of the exported payload, but for a simple read-only tool the description is quite complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds some value by associating markdown with 'reading' and JSON with 'programmatic use,' but this largely restates the format enum and does not meaningfully enhance understanding beyond the schema's already detailed slug and format descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Retrieve one page recipe's full implementation export.' It distinguishes itself by targeting a single page recipe (contrasting with list_page_recipes) and clarifies its relationship with a design kit, which supplies visual and interaction rules.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: this tool is used to obtain the full implementation of a single page recipe, paired with a design kit. It implies when to use it (when you need the page's structure and argument) but does not explicitly name alternative tools or state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_project_contextRead a project's stored contextA
What this brand project's product actually is: what it does, who it is for, what the design must respect, what has already been ruled out, which screens it has, and what it is built on. Read it before proposing anything for an existing project, and read it before set_project_context, because that call replaces rather than merges. A project that exists but has no context yet answers null, which is a different fact from a project that does not exist; that one is a 404. Free, needs kits:read.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Owned brand project id from list_brand_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It reveals important behaviors: a project without context returns null, a non-existent project returns 404, and the call is free and requires kits:read permission. This goes well beyond the schema and gives the agent crucial expectations for handling responses.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise yet dense with useful information. Each sentence serves a distinct purpose: the first defines the content, the second gives usage timing, the third clarifies edge-case behavior, and the fourth states permissions and cost. No fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having no output schema and no annotations, the description is remarkably complete for a read tool. It explains what the context contains, when to use it, what null vs. 404 mean, and the required permission. This is sufficient for an agent to invoke the tool correctly and interpret the response appropriately.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single parameter projectId is already described as 'Owned brand project id from list_brand_projects.' The tool description does not add additional parameter-level meaning beyond what the schema provides, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool reads a project's stored context and enumerates what that context contains (what it does, who it's for, design constraints, ruled-out options, screens, and foundation). It is specific with a verb and resource, and it distinguishes itself from the sibling set_project_context by explicitly saying to read before that call.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit usage guidance: read before proposing anything for an existing project and before calling set_project_context, because set_project_context replaces rather than merges. It also clarifies the null vs. 404 distinction, which tells the agent when a project exists without context versus when the project itself doesn't exist.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tokensGet design tokens for a themeA
Fetch one design kit's machine-readable tokens in the format that matches the target stack. It covers all 28 semantic color roles in both light and dark, plus typography and spacing. Use it to wire a kit into an existing styling layer when you do not need the written brief; pair it with get_design_md when you also need the rules. Read-only: it returns the file contents as text and writes nothing to disk. apply_theme writes tokens and DESIGN.md into a project in one step. Free kits are public; a Pro kit returns 403 unless the key is entitled.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Permanent id or slug of the kit, from list_themes / search_themes. Prefer the id: it never moves, while a slug can be renamed and a retired slug keeps resolving through an alias. | |
| format | No | Token format, default dtcg: dtcg (W3C design-token JSON) | css (custom properties on :root and .dark) | tailwind-v3 (config object) | tailwind-v4 (@theme block) | shadcn-registry (registry item) | json (the raw kit). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses behavior: 'Read-only: it returns the file contents as text and writes nothing to disk.' It also reveals the 403 error for entitled Pro kits, adding auth expectations beyond schema/annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, each earning its place: purpose, usage guidance, and behavioral transparency. It is front-loaded and free of filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only retrieval tool with 2 parameters and no output schema, the description covers all essential aspects: what it does, content scope, when to use, alternatives, side effects, and auth. It is sufficiently complete for an agent to select and invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, including detailed descriptions for both 'slug' and 'format' with enum values. The description adds only marginal context like 'format that matches the target stack,' but the schema already explains parameter semantics, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool fetches a design kit's machine-readable tokens in a format matching the target stack, specifying the content coverage (28 semantic color roles, typography, spacing). It distinguishes itself from siblings by explicitly contrasting with get_design_md and apply_theme.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance: 'Use it to wire a kit into an existing styling layer when you do not need the written brief; pair it with get_design_md when you also need the rules.' It also names apply_theme as the alternative for writing tokens into a project, covering when-not-to-use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_brand_projectsList brand projectsA
List every brand project owned by the connected key, each with its name, brief, variation count, and whether a client share link already exists. Start here to find a projectId before add_brand_variation or share_brand_project, and to check whether a board for this client already exists instead of creating a duplicate. Read-only and free: it takes no arguments, returns all projects at once (no pagination), and changes nothing. Requires the kits:read scope.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden, and it thoroughly discloses the read-only nature, no arguments, no pagination, no side effects, and required kits:read scope. This leaves no ambiguity about behavioral traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, front-loaded with the main purpose, and every sentence adds distinct value: purpose, usage context, and behavioral/scope details. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations and no output schema, the description covers return fields, pagination behavior, side effects, arguments, and scope. For a zero-parameter list tool, this is fully complete and leaves no gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has zero parameters, and the description explicitly confirms 'takes no arguments', adding clarity beyond the empty schema. This preempts any confusion about hidden or required parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('list') and resource ('brand projects'), and explicitly enumerates the returned fields (name, brief, variation count, client share link existence). It clearly distinguishes from sibling tools by focusing on brand projects and referencing related tools like add_brand_variation and share_brand_project.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool: before add_brand_variation or share_brand_project to find a projectId, and to check whether a board already exists to avoid duplicates. This provides clear context and alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_brand_project_versionsList a brand project's versionsA
The brand project's history, newest first: what changed, when, and by whom. Owner-scoped, so a project you do not own answers 404 exactly as a missing one does, and there is no tier gate. The timeline records the whole brand: its name and domain, its fonts, its pinned layers, its project context, and its variations, including a reorder. Sharing is deliberately absent, because who may see a brand is not what the brand is. An empty timeline means the project has not been written since versioning was wired, not that nothing has happened to it. Free to call, needs kits:read.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Rows per page, newest first. Default 50. | |
| before | No | Return versions BELOW this number, for paging. | |
| projectId | Yes | Owned brand project id from list_brand_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full transparency burden and excels: it discloses 404 behavior for non-owned projects, the absence of a tier gate, the deliberate exclusion of sharing info, and the meaning of an empty timeline. It also notes permission requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than minimal but each sentence adds unique value: purpose, scoping, content coverage, sharing rationale, empty-timeline meaning, and permissions. It's front-loaded with the primary purpose and remains readable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having no output schema, the description thoroughly explains what the timeline records (name, domain, fonts, layers, context, variations, reorder), the ordering, edge-case behavior, and permissions. This is complete for a list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers 100% of parameters, so the baseline is 3. The description adds some context around projectId (ownership scoping) but doesn't elaborate on limit or before, which are already documented in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists a brand project's version history, newest first, with details on what changed, when, and by whom. It distinguishes itself from siblings like get_brand_project_version (single version) and diff_brand_project_versions (comparison) by focusing on the full timeline.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear usage context: owner-scoped, no tier gate, free to call, requires kits:read, and explains that non-owned projects return 404. However, it doesn't explicitly name alternative tools or say when not to use it, so only a point off.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_client_commentsRead client feedbackA
Read what the client wrote on a project's variations through the share link, oldest first, with the variation each comment is attached to and the author's display name. This is the return leg of the share loop: without it you can build a brand project, attach directions and send the link, but never learn what the client actually said about them. Call it before revising, then act on it with update_brand_variation, update_theme, or remove_brand_variation. Anonymous commenters appear as 'Guest' rather than an id, and deleted comments are omitted. Read-only, changes nothing, takes no pagination. Requires the kits:read scope.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Owned brand project id from list_brand_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full behavioral disclosure. It explicitly states 'Read-only, changes nothing,' reveals edge cases ('Anonymous commenters appear as 'Guest'...' and 'deleted comments are omitted'), and specifies scope requirements ('Requires the kits:read scope'). This is unusually transparent for a tool description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose, then expands with context, usage guidance, edge cases, and requirements. Every sentence earns its place—background context, actionable follow-ups, edge cases, and scope are all relevant. Despite length, it is dense and efficient, not redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description adequately describes the returned content: variation, author display name, ordering, and omission of deleted comments. It also covers invocation context, read-only nature, no pagination, and required scope. This is complete for a single-parameter, non-nested list operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already has 100% coverage with a good description of projectId ('Owned brand project id from list_brand_projects'), so the baseline is 3. The tool description does not add meaningful parameter semantics beyond what the schema provides; it only contextualizes the operation around the share link, not the parameter itself.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Read') and identifies the exact resource: 'what the client wrote on a project's variations through the share link.' It clearly distinguishes this from sibling tools by detailing scope ('a project's variations'), ordering ('oldest first'), and included fields (variation, author display name), making the tool's purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage context: it is 'the return leg of the share loop' and tells the agent to 'Call it before revising.' It names concrete follow-up tools ('update_brand_variation, update_theme, or remove_brand_variation'), and states a limitation ('takes no pagination'). This is strong when-to-use guidance with clear alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_image_directionsList image directionsA
Browse image directions, which decide how a project's photography and illustration should be made: the process, treatment, and subject matter. Use one when a kit is chosen but the imagery still has no direction, which is where most agent-built pages fall back to stock-looking filler. Returns judgment summaries with no export payload, so pick a slug and call get_image_direction for the implementable version. A direction sits alongside the design kit and never replaces it; the kit still owns color, type, and brand rules. Read-only and free, and Pro records appear in the list without exposing their contents.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Search names, aliases, visual signals, fit, and agent tags. | |
| use | No | The website job the image must perform. | |
| sort | No | Curated order, alphabetical order, or Free records first. | |
| tier | No | Show Free records, Pro records, or both. | |
| family | No | One or more image-process families. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so excellently: 'Returns judgment summaries with no export payload', 'Read-only and free', and 'Pro records appear in the list without exposing their contents.' These are key behavioral disclosures beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is composed of five focused sentences, each adding distinct value: purpose, when to use, return behavior, relationship to design kit, and access limitations. There is no redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with 5 optional parameters and no output schema, the description sufficiently covers the purpose, usage context, return behavior (summaries), pointer to the detailed sibling tool, and read-only/free status. It is a complete description for an agent to decide when and how to invoke it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%—every parameter has a clear description in the schema. The tool description does not add additional parameter semantics beyond the schema, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Browse image directions' and explains what image directions are (process, treatment, subject matter for photography/illustration). It also distinguishes itself from the sibling get_image_direction by specifying that it returns judgment summaries rather than the implementable version.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit usage context: 'Use one when a kit is chosen but the imagery still has no direction...' and directs to the alternative tool: 'pick a slug and call get_image_direction for the implementable version.' This clearly states when to use this tool vs. the sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_interface_stylesList interface stylesA
Browse interface styles, which decide how surfaces and hierarchy render: how panels stack, how density and depth read, how structure is expressed. A style is a neutral render grammar you apply through a design kit, not a second source of palettes, fonts, or brand rules, so it answers how the UI is built rather than what it looks like. Use one when the kit is settled but the layout still defaults to generic cards on a grid. Returns judgment summaries with no export payload; pick a slug and call get_interface_style for the implementable version. Read-only and free, and Pro records appear in the list without exposing their contents.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Search names, aliases, visual signals, fit, and agent tags. | |
| use | No | The product/use-case lane the interface must support. | |
| sort | No | Curated order, alphabetical order, or Free records first. | |
| tier | No | Show Free records, Pro records, or both. | |
| family | No | One or more interface render-grammar families. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It clearly states that the tool is read-only and free, that it returns judgment summaries with no export payload, and that Pro records appear without exposing their contents. This gives the agent a precise picture of side effects and access characteristics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with 'Browse interface styles' and each sentence earns its place: definition, differentiation, usage context, return behavior, and note on Free/Pro. It is detailed without being redundant, and no sentence is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a list tool with 5 filter parameters and no output schema, the description is highly complete. It explains the return format (judgment summaries, no export payload), guides the next step (call get_interface_style), and covers the Free/Pro access model. The schema handles parameter syntax, so the description fills in all contextual gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value beyond the schema by explaining that Pro records appear in the list without exposing their contents, clarifying the tier parameter's behavior. It also frames the return as judgment summaries, which helps the agent understand what filters will yield.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource ('Browse interface styles') and clearly defines what a style is: a neutral render grammar that decides how surfaces and hierarchy render. It also distinguishes styles from themes/palettes/brand rules and from the companion get_interface_style tool, making the tool's purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives an explicit when-to-use scenario ('Use one when the kit is settled but the layout still defaults to generic cards on a grid') and an explicit alternative ('pick a slug and call get_interface_style for the implementable version'). It also clarifies what the tool is not for ('not a second source of palettes, fonts, or brand rules'), providing clear when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_kit_historyList a kit's history ledgerA
Everything that has happened to one of your saved kits, newest first: its creation, every save, and every time it was applied to a brand. Wider than list_kit_versions, which only sees the events that minted a version — an apply-to-brand event appears here and nowhere else, so this is the tool that answers whether a kit was ever actually used rather than merely edited. Each row carries an event id; pass it to get_kit_history_event for the full kit as it stood at that moment. Metadata only, so no tokens come back here. Only kits saved under an API key have a ledger: a curated catalog kit is shipped rather than edited, and asking for one answers 404 rather than an empty list, because you do not own it. Paged by an OPAQUE cursor, not by a number — hand meta.nextCursor back unchanged rather than constructing one, and a cursor this endpoint did not issue is rejected rather than silently restarting from the top. Free to call, needs kits:read.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Permanent kit id or slug of a kit you own. | |
| limit | No | Rows per page, newest first. Default 20, max 50. | |
| cursor | No | Next page. meta.nextCursor from the previous response, passed back byte for byte. Opaque: it is not a number, a date or an id you can build. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses 404 for unowned kits, opaque cursor rejection, metadata-only results, and the required kits:read permission. It also clarifies ordering and that apply-to-brand events appear here and nowhere else, going well beyond a simple 'list' label.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but each sentence adds unique value: event scope, sibling comparison, event id depth, token absence, ownership 404, cursor rules, and permission. There is no filler, and the structure is logical.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers return semantics (rows, event ids, meta.nextCursor), edge cases (404 for catalog kits, opaque cursor rejection), and authentication (kits:read). With no output schema, this is sufficient for an agent to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All three parameters are fully described in the schema (100% coverage), so the baseline is 3. The description reinforces cursor opacity and slug ownership but does not add new parameter-level syntax beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it lists a kit's history ledger with specific event types (creation, save, applied to brand). It explicitly contrasts with list_kit_versions and names the distinguishing use case, so purpose is unambiguous and differentiated from siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use guidance: 'this is the tool that answers whether a kit was ever actually used rather than merely edited.' Also explains the ownership condition (API-key kits vs curated catalog) and 404 behavior, giving clear context for when to call and what to expect.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_kit_versionsList a kit's versionsA
The kit's VERSION timeline, newest first: which version, when, by whom, and the author's note. Use it to answer the question a repo built against this kit actually has, which is whether the kit has moved since. It is not the full history: a version is minted only when the kit is created or saved, so applying the kit to a brand appears nowhere here. list_kit_history is the wider record and includes those. Metadata only, so no tokens come back; get_kit_version returns a whole snapshot and diff_kit_versions says what changed between two. Versions exist only for kits saved under an API key: a curated catalog kit is shipped rather than edited, so its timeline is empty and meta.currentVersion is 0. That 0 means no version has been minted, which is a real state and not a missing value. Paginated newest-first through meta.nextBefore. For a Pro kit you are not entitled to, rows still come back but the free-text label is null, because an author's note can restate a token you may not read. Free to call, needs kits:read.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Permanent kit id or slug, the same as any other read. | |
| limit | No | Rows per page, newest first. Default 50. | |
| before | No | Return versions BELOW this number. Pass meta.nextBefore from the previous page. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full responsibility for behavioral disclosure. It covers token cost ('Metadata only, so no tokens come back'), pagination ('Paginated newest-first through meta.nextBefore'), edge cases for catalog kits (empty timeline, currentVersion 0), the difference between '0' and missing value, and permission requirements ('needs kits:read'). It also discloses Pro kit label null behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but every sentence contributes essential context—purpose, usage guidance, exclusions, alternatives, edge cases, and permissions. It is front-loaded with the core purpose. However, it is a single dense paragraph without line breaks, which slightly harms readability, though not enough to lower below 4.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description fully covers the tool's behavior for a read operation: what it returns, how pagination works, edge cases for catalog and Pro kits, and permission requirements. It also clarifies the meaning of the 0 currentVersion state. No output schema exists, but the description sufficiently explains the expected content without needing to detail the exact response structure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds minimal extra parameter meaning beyond the schema—it mentions pagination via meta.nextBefore, but the schema already explains 'Pass meta.nextBefore from the previous page' for the before parameter. No new parameter semantics are introduced.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'The kit's VERSION timeline, newest first: which version, when, by whom, and the author's note.' It distinguishes from siblings by explicitly contrasting with list_kit_history, get_kit_version, and diff_kit_versions, making the purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use guidance: 'Use it to answer the question a repo built against this kit actually has, which is whether the kit has moved since.' It also states when not to use it ('It is not the full history...') and names the alternatives (list_kit_history, get_kit_version, diff_kit_versions).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_mockup_jobsList brand mockup jobsA
List one brand project's mockup jobs newest first, including status, progress, errors, and completed result URLs. Read-only. Requires kits:read.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Owned brand project id from list_brand_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since no annotations are provided, the description carries the behavioral burden. It discloses read-only nature, required permission scope, ordering, and included fields (status, progress, errors, result URLs). This goes beyond a minimal description, though it omits details like pagination.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences immediately convey purpose, ordering, content, and permissions. No filler or redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with one parameter and no output schema, the description covers the core behavior, expected fields, and access requirements. It may not mention pagination limits, but overall it's sufficiently complete for an agent to decide when to invoke.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter projectId is fully documented in the schema with description 'Owned brand project id from list_brand_projects.' Since schema coverage is 100%, the description adds little beyond the tool's own mention of 'one brand project'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description uses specific verb 'List' with resource 'mockup jobs' and scope 'one brand project's', also mentions ordering 'newest first' and content. This distinguishes it from sibling get_mockup_job which fetches a single job.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
States it lists one brand project's jobs, implying you need a projectId from list_brand_projects (defined in schema). Also says 'Read-only' and 'Requires kits:read', giving context on when it's safe to use. However, it does not explicitly name alternatives or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_name_candidatesRead a naming kanban boardA
Read one project's candidate kanban. Returns each persisted name with its status, rank, notes, attached research evidence, originating recipe, generation provenance, and an updatedAt timestamp you pass back to move_name_candidates or rank_name_candidates to guard against stale writes. Filter by status to review a single column, such as just the shortlisted or finalist names. Read-only, paginated, and free. Requires the naming:read scope.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size, 1-100. | |
| offset | No | Start index for paging, default 0. | |
| statuses | No | Return only these kanban columns. Omit for the whole board. | |
| projectId | Yes | Owned naming project id from list_naming_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does well: it states 'Read-only, paginated, and free' and mentions the required 'naming:read' scope. It also discloses the return payload details (status, rank, notes, provenance, updatedAt) and the stale-write mechanism, providing behavior beyond simple read semantics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but efficient—five sentences that stay on topic. It front-loads the core purpose, then adds return-value details, use cases, and constraints. Every sentence contributes information without padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 4 parameters, no output schema, and no annotations, the description is remarkably complete. It covers the return fields (compensating for missing output schema), pagination behavior, filtering, scope requirement, and the relationship to sibling write tools, giving an agent all necessary context to invoke and interpret the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all four parameters. The description adds contextual meaning by framing statuses as filtering by kanban column ('shortlisted or finalist') and relating pagination to a list view. This goes beyond the schema's basic descriptions, earning a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with 'Read one project's candidate kanban,' which precisely identifies the resource and action. It distinguishes from sibling list tools by focusing on the candidate kanban and explicitly referencing related write tools (move_name_candidates, rank_name_candidates), making it clear this is the read-side counterpart.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives practical context: 'Filter by status to review a single column' and notes that the returned updatedAt is passed to move/rank tools to guard against stale writes. This implies when to use the tool but does not explicitly state exclusions (e.g., 'use X instead when...'), so a 4 is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_name_generationsRead naming generation provenanceA
Read the generation ledger for one project: every generate_names run with its request fingerprint, recipes and settings, model, prompt version, how many names it produced, how many credits it reserved and actually consumed, final status, and timestamps. Use it to answer where a given set of names came from, or to check whether a run that appeared to fail actually charged anything before retrying. Read-only, paginated, and free. Requires the naming:read scope.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size, 1-100. | |
| offset | No | Start index for paging, default 0. | |
| projectId | Yes | Owned naming project id from list_naming_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully carries the behavioral disclosure burden. It states read-only, paginated, free, requires the naming:read scope, and enumerates return fields including credit reservation/consumption. This is comprehensive for a read-only list tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two well-structured sentences: the first lists what the tool returns, and the second provides use cases and key properties. Every sentence delivers useful information with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite lacking an output schema, the description effectively documents return values by listing all major fields (fingerprint, recipes, model, credits, status, timestamps). It also covers pagination, permissions, and cost implications, making the tool's behavior fully understandable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds context like 'for one project' and 'paginated' but doesn't explain the parameters themselves beyond what the schema already provides. No additional semantics are introduced.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool reads the generation ledger for one project, listing every generate_names run with specific data fields. This specific verb+resource+scope distinguishes it from sibling list tools like list_naming_recipes and list_naming_projects.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly gives two use cases: tracing where a set of names came from and checking if a failed run charged credits before retrying. While it doesn't name alternative tools directly, the context strongly implies when this tool is appropriate in relation to other listing tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_naming_projectsList naming projectsA
List the persistent naming boards owned by the connected key, with each project's id, name, brief, researched TLDs, chosen name, and candidate counts. Start here to recover the projectId for an existing brief, since every other naming tool needs one, and only call create_naming_project when nothing here fits. Read-only, paginated, and free. Requires the naming:read scope.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size, 1-100. | |
| offset | No | Start index for paging, default 0. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully carries the burden. It explicitly discloses that the operation is read-only, paginated, free, and requires the naming:read scope. This is a high level of transparency for a list tool, covering safety, authorization, and paging behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise—three sentences total—with the core purpose front-loaded. Every sentence adds value, and there is no redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite lacking annotations and output schema, the description covers purpose, usage context, return fields, security scope, and paging. For a simple list tool with two well-defined params, this is complete and actionable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides 100% coverage for the two parameters (limit and offset), including descriptions and ranges. The description only mentions 'paginated' which is a general behavior, not parameter-specific detail. Baseline 3 is appropriate given schema completeness.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists persistent naming boards with specific fields (id, name, brief, researched TLDs, chosen name, candidate counts). It distinguishes itself from siblings like list_naming_recipes and create_naming_project by emphasizing ownership and the purpose of recovering projectId.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance is provided: 'Start here to recover the projectId for an existing brief' and 'only call create_naming_project when nothing here fits'. This directly tells the agent when to use this tool versus the primary alternative, with a clear rationale.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_naming_recipesDiscover naming recipesA
List every public naming strategy Identity Forge can generate from, with each recipe's id, intent, generation instruction, and settings. Call it before generate_names so you pick 1-8 recipe ids that genuinely fit the brief instead of guessing at strategy names. Recipe ids are stable, so you can skip this once you already know the ones you want. Read-only, free, and needs no arguments.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of disclosing behavior. It states the tool is 'Read-only, free, and needs no arguments,' and describes the output contents. It also clarifies it lists only 'public' recipes, adding a limitation not implied by the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded: the first sentence states purpose, the second gives usage guidance, the third adds a stability note, and the fourth summarizes traits. Every sentence adds value with no waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple no-arg list tool with no output schema, the description is thorough. It explains what the tool returns, when to use it, and its safety profile. No gaps remain for the agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema already covers everything. The description adds an explicit 'needs no arguments' statement, which is helpful but redundant. Baseline 4 is appropriate for a no-argument tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists 'every public naming strategy Identity Forge can generate from' and specifies the returned fields (id, intent, generation instruction, settings). It distinguishes itself from sibling list tools like list_page_recipes by focusing on naming recipes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs to 'call it before generate_names' to select recipe ids, and notes 'you can skip this once you already know the ones you want.' This gives clear when-to-use and when-not-to-use guidance, referencing the specific sibling tool it supports.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_page_recipesList page recipesA
Browse page recipes, which decide how a page argues its case: what it leads with, in what order it earns belief, and what the reader should walk away knowing. Use one when you know what a page must achieve but not how to sequence it, which is the gap that produces hero-features-pricing pages by default. Returns judgment summaries with no export payload; pick a slug and call get_page_recipe for the implementable version. Each record carries a model field: most are legacy-sequence, which prescribes a section order, while communication-idea records state the argument and leave the sequencing to you. Read the model before following a record, since the two ask different things of you. This covers structure and argument, not visuals; the design kit still owns those. Read-only and free.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Search names, codes, audience, communication ideas, examples, legacy sections, and agent tags. | |
| goal | No | The communication job the page must perform. | |
| sort | No | Curated order, alphabetical order, or Free records first. | |
| tier | No | Show Free records, Pro records, or both. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full behavioral transparency. It discloses return format ('judgment summaries'), the absence of an export payload, the distinction between legacy-sequence and communication-idea records, and the scope boundary ('covers structure and argument, not visuals'). It also explicitly notes 'Read-only and free,' which is essential behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence earns its place: purpose, usage trigger, alternative, return behavior, model field nuance, and scope limitation. It is front-loaded with the main verb and resource, and flows logically without fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (list/read) but the domain has nuance. The description covers return format, the model field meaning, and what the tool does not cover (visuals). With no output schema, this level of description is ample for an agent to understand what to expect and how to proceed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage for all four parameters, so the baseline is 3. The description does not add parameter-specific detail beyond what the schema provides; it focuses on the returned records' model field. That is fine but not additive to parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb ('Browse') and a clear resource ('page recipes'), then explains what page recipes are and what they do. It also distinguishes this tool from its sibling get_page_recipe by framing list_page_recipes as the browsing step and get_page_recipe as the follow-up. This makes the purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool: 'Use one when you know what a page must achieve but not how to sequence it.' It also names the alternative: 'call get_page_recipe for the implementable version.' It adds a caution to read the model field before following a record, which is actionable guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_themesList design themesA
Browse the published catalog as compact summaries: slug, name, summary, tags, audience, a font and palette glimpse, tier, and computed discovery facets covering use-case fitness from 0 to 100, moods, and industries. This is the main entry point for finding a design kit. Filter by what the user is actually building: use re-orders the catalogue for that surface rather than narrowing it, each kit carrying a fitness score measured on its own tokens, and q runs a synonym-aware ranked search that understands phrases like 'calm fintech dashboard'. Results are paginated and report the total plus the next offset, so page rather than assuming the first response is the whole catalog. Summaries carry no tokens, no DESIGN.md, and no font files; pull one kit with get_design_md or get_tokens, or apply_theme to write it into the project. Prefer search_themes when the brief is too subtle to rank against a lane and you want to weigh the entire catalog yourself. Read-only and free, and it lists Pro kits without exposing their contents.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Ranked discovery search that understands moods, industries, and use cases via synonyms (e.g. 'calm fintech dashboard'). | |
| use | No | RE-ORDERS the catalogue for this use case rather than narrowing it. The documented >=55 cut excludes almost nothing. Response is fit-ranked and each kit carries fit {score}, computed from the kit's palette contrast, typography and density rather than judged by a model, so it largely reflects how well built a kit is and clusters high everywhere. Read the order, not the number. `reason` is part of the shape and is absent for every kit today, so never tell the user WHY a kit scored what it did. For the data lanes read each kit's `charts` block instead: series separation (`minDeltaE`, `cvdMinDeltaE`), `hueFamilies`, and `severityHeadroom` are measurements you can act on and state to a user, where the fitness score is not. | |
| sort | No | Order: featured (default, curated) | popular (most saved+installed) | recent | name | fit (computed use-case fitness; needs use=; re-orders rather than narrows). | |
| limit | No | Page size (1-50, default 12). | |
| offset | No | Start index for paging (default 0). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full transparency burden. It discloses pagination behavior (total + next offset), that `use` re-orders rather than narrows, that summaries lack tokens/DESIGN.md/fonts, that fitness scores are computed with `reason` absent for all kits, and that the tool is read-only/free and lists Pro kits without exposing contents.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but information-dense; every sentence contributes critical context such as catalog contents, filtering semantics, pagination, content absence, and alternatives. It is front-loaded with purpose and free of filler, though slightly verbose for a simple reader.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description explains the response shape (compact summaries with fields, total + next offset) and explicitly lists what is absent. It covers filtering, pagination, content limitations, and alternative tools, making it complete for a tool with this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds non-obvious behavioral semantics beyond parameter descriptions: `use` re-orders instead of narrowing, `q` is synonym-aware, pagination requires paging through offsets, and the fitness score caveat (read the order, not the number). It also explains how to interpret `charts` blocks for data lanes, which is actionable and beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description opens with the specific verb and resource: 'Browse the published catalog as compact summaries,' and positions this as 'the main entry point for finding a design kit.' It also differentiates from siblings by directing token/DESIGN.md retrieval to get_design_md/get_tokens and naming search_themes as the alternative for subtle briefs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use: 'This is the main entry point for finding a design kit' and provides exclusions: 'Prefer search_themes when the brief is too subtle to rank against a lane.' It also advises using get_design_md or get_tokens for full contents, giving concrete alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
match_paletteMatch themes to brand colorsA
Rank published kits by how close their palette sits to colors the user already owns, using perceptual color distance rather than string matching. Use it when a brand has existing colors that the design system has to live with, such as an established logo. This ranks on color alone and ignores mood, audience, and use case, so treat the result as a shortlist and check the rest of the fit with get_design_md before committing. When the user has no fixed colors, list_themes or search_themes will serve them better. Read-only and free.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many to return, 1-10, default 4. | |
| colors | Yes | One or more brand colors as CSS strings, hex, oklch, or rgb, e.g. ['#0A84FF', '#1C1C1E']. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description takes on full responsibility. It discloses the tool is 'Read-only and free,' states a core behavioral limitation 'ranks on color alone and ignores mood, audience, and use case,' and warns the output is a shortlist needing further validation. This is highly transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately compact—three sentences that front-load the core purpose, then provide usage guidance, limitations, and alternatives. Every clause adds value; no wasted words or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with only two parameters and no output schema, the description covers all critical aspects: purpose, relevance, limitations, complementary actions, and safety. It gives enough context for an agent to know when and how to invoke it, and what to do with the results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides 100% description coverage for both parameters, so the baseline is 3. The description reinforces the meaning of 'colors' (brand colors the user owns) but adds no new syntax or formatting details beyond the schema, which is sufficient.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb 'Rank' and clearly identifies the resource 'published kits' and the scope 'by how close their palette sits to colors the user already owns, using perceptual color distance rather than string matching.' This precisely distinguishes it from siblings like list_themes or search_themes, which do not rank by color fit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use: 'when a brand has existing colors that the design system has to live with.' It also gives a clear exclusion: 'When the user has no fixed colors, list_themes or search_themes will serve them better.' Additionally, it advises to 'check the rest of the fit with get_design_md before committing,' naming the complementary tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
move_name_candidatesMove or annotate naming candidatesA
Progress up to 100 candidates through the kanban in one atomic write, and optionally replace their notes and evidence at the same time. Columns run generated, reviewing, shortlisted, finalist, selected, and rejected. This is the tool for recording a decision and why you made it; rank_name_candidates only reorders and leaves status alone. A project can hold exactly one selected candidate, and selecting one also sets the project's chosen brand name, so treat that move as the final call. Pass expectedUpdatedAt from list_name_candidates to reject a write when the row changed underneath you. Requires the naming:write scope.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Owned naming project id from list_naming_projects. | |
| operations | Yes | 1-100 operations, applied atomically. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries full burden, and it delivers: it discloses atomicity ('one atomic write'), the hard constraint that a project holds exactly one selected candidate, the side-effect of setting the project's chosen brand name upon selection, and optimistic concurrency behavior via expectedUpdatedAt. The auth requirement is also stated. This is rich, non-redundant behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences pack a dense but clear payload: purpose, alternatives, side effects, concurrency, and auth. No filler or redundancy; front-loaded with the core action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex mutation tool with nested operations, no annotations, and no output schema, the description covers all key operational facets: what is moved, column order, atomicity, uniqueness constraint, brand-name side effect, concurrent-write protection, and scope requirement. The only minor omission is return value, but that's not essential given the tool's action-oriented nature.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, and the description adds little over the schema. The description mentions passing expectedUpdatedAt from list_name_candidates, but that information already exists in the schema property description. The 'up to 100 candidates' limit mirrors schema maxItems. Thus the description provides minimal additional parameter meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Progress up to 100 candidates through the kanban in one atomic write, and optionally replace their notes and evidence at the same time.' It explicitly contrasts with rank_name_candidates ('only reorders and leaves status alone'), making the tool's distinct purpose unambiguous. Columns are enumerated, removing any ambiguity about valid states.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly recommends this tool for 'recording a decision and why you made it' and names the alternative (rank_name_candidates) that should be used for pure reordering. It also instructs the agent to pass expectedUpdatedAt from list_name_candidates to handle concurrent modifications, and states the required auth scope (naming:write). This is exemplary when-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rank_name_candidatesRank naming candidatesA
Assign explicit user-facing priority ranks to up to 100 candidates on one naming board in a single atomic write, so every ranking applies or none does. Rank 1 is the highest priority and ties are allowed. This changes ONLY the rank field: kanban status, notes, and evidence are left untouched, so use move_name_candidates when you want to progress a candidate or record a decision. Use it to express a deliberate shortlist order for the user, not to record research. Requires the naming:write scope; it spends no AI credits.
| Name | Required | Description | Default |
|---|---|---|---|
| rankings | Yes | 1-100 ranking operations, applied atomically. | |
| projectId | Yes | Owned naming project id from list_naming_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses behavioral traits: atomicity ('every ranking applies or none does'), scoped side effects ('changes ONLY the rank field'), required permission ('naming:write scope'), and cost ('spends no AI credits'). This completely carries the transparency burden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, each earning its place: purpose and constraints, rank semantics, side effects/alternative, and usage/requirements. The text is front-loaded with the core action and contains no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite the absence of annotations and output schema, the description covers atomicity, side-effect scope, permission, cost, and when-to-use versus alternatives. Together with the rich input schema, this forms a complete behavioral contract for the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and already provides detailed parameter descriptions (rank semantics, candidateId source, expectedUpdatedAt's optimistic concurrency). The description adds no parameter-specific meaning beyond what the schema provides, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Assign explicit user-facing priority ranks'), names the resource ('up to 100 candidates on one naming board'), and scopes the action clearly. It also distinguishes from the sibling 'move_name_candidates' by explicitly stating this changes only the rank field.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool ('express a deliberate shortlist order') and when not to ('not to record research'). It also directs to the alternative tool: 'use move_name_candidates when you want to progress a candidate or record a decision.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recommend_kitsRecommend kits for a projectA
Kit candidates for a specific product, grounded in the context stored on its project rather than in a description you re-send. Each candidate comes back with the kit's own case for itself — what it is for, its motifs, its do's and don'ts, its moods and industries, and its computed fitness for the surfaces this product actually has — so you can rank them yourself. With a Pro account and a kits:write key you also get a model-authored ranking with a reason per candidate written against this product; meta.depth says which you got, ranked or candidates, and meta.order says plainly that the free ordering is computed lane fitness and not a recommendation. Two things that differ from the rest of discovery: this costs 3 quota units where list_themes and search_themes cost 1, and it requires an API key where every other discovery route works anonymously. Call set_project_context first: a project with no stored context returns 400 rather than guessing. Creates nothing.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many candidates to return. | |
| projectId | Yes | Owned brand project id whose stored context grounds the proposal. Write it with set_project_context first. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses that the tool requires an API key, costs 3 quota units, returns meta.depth and meta.order to clarify mode and ordering, returns 400 if context is missing, and explicitly says 'Creates nothing' to signal no side effects. This far exceeds the transparency normally expected.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph but each sentence adds distinct value: purpose, candidate contents, ranking mode, differences from other routes, and prerequisite. It is front-loaded with the core function and avoids fluff, though it is somewhat dense in presentation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Even without an output schema, the description explains what the response contains (candidate self-cases, meta.depth, meta.order), the auth and quota conditions, the error scenario, and the read-only nature. For a tool with two parameters and no output schema, this fully equips the agent to select and invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds contextual meaning to projectId by tying it to set_project_context and stored context, and clarifies that limit only controls candidate count. While limit is self-explanatory, projectId's prerequisite is well articulated, adding value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool recommends kit candidates for a specific product, grounded in stored project context. It distinguishes from siblings by emphasizing that it uses stored context instead of a re-sent description, and explicitly differentiates from list_themes and search_themes by cost and auth requirements, plus 'Creates nothing' clarifies side-effect-free behavior.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says 'Call set_project_context first' as a prerequisite and notes that a project without stored context returns 400. It also highlights the two differences from other discovery routes: higher quota cost and API key requirement, and explains the two modes (free candidates vs. ranked with Pro+key), which gives clear when-to-use and alternative comparisons.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remix_themeRemix a design kitA
Copy an existing kit into a new private kit with overrides applied. The source can be your own kit, a catalog kit, or another user's public kit. This is the fast path when you want three or four variations on one direction: call it repeatedly against the same source with different overrides. The original is never modified. Reach for create_theme instead when you are authoring a kit rather than varying one. A Pro-tier source needs an entitled key, and the copy is private until you publish it from the web Studio. Requires the kits:write scope.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Name for the copy. Defaults to the source name with a variation suffix. | |
| slug | Yes | Permanent id or slug of the kit to copy: your own, a catalog kit, or a public user kit. Prefer the id: it never moves, while a slug can be renamed and a retired slug keeps resolving through an alias. | |
| overrides | Yes | Mix-and-match overrides applied on top of the base kit. Structure-level composition is not available via the API. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It clearly states the original is never modified, the copy is private until published from the web Studio, requires kits:write scope, and a Pro-tier source needs an entitled key. It also implies each call creates a new copy. The only minor gap is not describing the return value or error behavior, but the core side effects and prerequisites are well disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is five sentences, each adding distinct value: core action, source types, use case, non-destructive guarantee, alternative tool, entitlement, privacy, and scope. It is front-loaded with the main purpose and contains no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (nested overrides, 3 params, no output schema), the description covers essential context: source eligibility, repeated-call strategy, alternative tool, permissions, entitlement, privacy, and non-destructive behavior. The schema already documents parameter structure, so the description need not repeat it. It is sufficiently complete for an agent to decide when and how to invoke it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description does not add much beyond the schema: it mentions overrides are applied and that name defaults to a variation suffix, but those are already present in the schema. The repeated-call pattern is useful context but doesn't enrich parameter meaning beyond what schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource: "Copy an existing kit into a new private kit with overrides applied." It clearly distinguishes itself from create_theme by explicitly naming that tool as the alternative for authoring rather than varying, and the scope (source types, private copy) is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use guidance: "fast path when you want three or four variations on one direction: call it repeatedly against the same source with different overrides." It also provides an explicit exclusion: "Reach for create_theme instead when you are authoring a kit rather than varying one." Additional context about Pro-tier entitlement and private-until-publish further clarifies when this tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_brand_layerTake a layer off a brandA
Remove one composed record from a brand project. The brand keeps its design kit and every other axis; only this reference goes. Name the record rather than just the axis, so a stale view of the brand cannot clear a layer it never saw — pass the id you read from get_brand_layers rather than one you remember. Safe to repeat: an id that is not composed answers changed: false, changes nothing and mints no version. When the intent is to swap rather than to clear, call add_brand_layer with replace: true instead; removing first leaves the brand briefly without that axis and takes two versions to say one thing. This takes effect on the user's brand immediately and requires confirm: true; without it nothing changes. Requires the kits:write scope.
| Name | Required | Description | Default |
|---|---|---|---|
| axis | Yes | Which axis the record sits on. | |
| confirm | Yes | Must be exactly true. Required because removal is permanent. | |
| recordId | Yes | Permanent id of the composed record, as reported by get_brand_layers. | |
| projectId | Yes | Owned brand project id from list_brand_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden and does so thoroughly: confirms permanence, requires confirm:true, states idempotency (changed:false, no version), immediate effect, and required kits:write scope. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action, and each subsequent sentence adds operational detail (idempotency, swap guidance, effect timing). Nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive mutation with no output schema, this covers prerequisites, side effects, alternatives, and error behavior comprehensively. The absence of output schema is mitigated by transparent no-op handling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite 100% schema coverage, the description adds critical meaning: recordId should come from get_brand_layers not memory, confirm must be exactly true, and explains semantics of 'not composed' responses. This exceeds baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb-resource pairing: 'Remove one composed record from a brand project.' It clearly scopes the operation to a single layer reference and distinguishes from sibling add_brand_layer by stating what is NOT removed (design kit and other axes).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly contrasts with add_brand_layer: 'When the intent is to swap rather than to clear, call add_brand_layer with replace: true instead.' Also instructs to pass the id read from get_brand_layers, preventing stale-data misuse.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_brand_variationRemove a brand variationA
Permanently DELETE one brand proposal from a project. The client stops seeing that direction on their next share view, and the comments they left on it go with it. This cannot be undone, there is no archive, and confirm: true is required, so read list_client_comments first if the feedback on that direction still matters. The surviving variations keep the positions they already had, which leaves a gap in the sequence rather than closing it, so follow with reorder_brand_variations when the order the client meets them in matters. Use update_brand_variation instead when the direction should be revised rather than retired. Requires the kits:write scope.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | Yes | Must be exactly true. Required because deletion is permanent. | |
| projectId | Yes | Owned brand project id from list_brand_projects. | |
| variationId | Yes | Id of the variation in that project to delete. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses behavioral traits: permanent deletion, no archive, comments lost, gap in sequence, confirm requirement, and auth scope. This far exceeds the minimum needed for safe use.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise yet information-dense, with a clear opening and each sentence serving a distinct purpose (consequences, required confirm, ordering side effect, alternative). No fluff or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (permanent delete, side effects, alternatives), the description is complete: it covers effects on client view, comments, sequence gaps, required confirm, auth scope, and related tools. No output schema or annotations, so this fills all gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for all parameters. The description adds context around the confirm parameter (permanence) but does not add new meaning beyond the schema, so a baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Permanently DELETE one brand proposal from a project,' clearly stating the action and resource. It distinguishes itself from sibling tools like update_brand_variation and reorder_brand_variations, making the purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance is provided: when to use update_brand_variation instead, when to follow with reorder_brand_variations, and when to read list_client_comments first. This gives clear when-to-use and when-not-to-use context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reorder_brand_variationsReorder brand variationsA
Set the order the client meets the directions in. The share page walks the variations in this order, so the first id is the direction the client sees first, which is worth deciding deliberately rather than leaving on the order you happened to attach them in. This OVERWRITES the stored order of the whole project and takes effect on the client's next view. You must list every variation in the project exactly once: a partial list is rejected with 400 and the expected id set, because writing positions for only some of them would collide with the ones left behind. Get the current ids from the response of add_brand_variation, or from a previous call to this tool, which returns the variations in their new order. Requires the kits:write scope.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Owned brand project id from list_brand_projects. | |
| variationIds | Yes | Every variation id in the project, exactly once, in the order the client should see them. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description covers all key behavioral traits: it OVERWRITES the stored order, takes effect on next view, rejects partial lists with a 400, requires kits:write scope, and returns the new order. This exceeds expectations for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is detailed but every sentence contributes new information: purpose, client-view impact, overwrite warning, constraint/error, id source, and auth. It is front-loaded with the main purpose and flows logically. A minor typo ('directions' instead of 'variations') and slight verbosity keep it from a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Even without output schema or annotations, the description thoroughly explains behavior, errors, auth, and id sourcing. It covers the critical requirement to list all variations exactly once. It doesn't specify a formal response structure, but it mentions the return order, making it sufficiently complete for this operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already explains both parameters with good descriptions. The description adds value by telling users where to obtain variationIds (from add_brand_variation or a previous call) and reinforces the 'exactly once' requirement, providing context beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Set the order the client meets the directions in') and identifies the resource (brand variations). It distinguishes itself from sibling tools like add/update/remove by focusing solely on reordering, even explaining the share page impact.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides strong usage context: the order is a deliberate decision, and every variation must be listed exactly once, with partial lists rejected. It also references add_brand_variation as a source for ids. However, it does not explicitly state when not to use it or name alternatives, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_name_evidenceRun model-authored name searchesA
Run up to 20 web searches you author yourself against a candidate name, for existing-company collisions, market context, meaning, unfortunate readings in another language, negative associations, or official registers. You write the queries because you know what would disqualify this particular name. Returns dated raw results and nothing else: it does not score, rank, decide whether a collision is real, or constitute trademark clearance. Read the results, form your own view, and attach both the evidence and your interpretation to the board with move_name_candidates. For domain registration and DNS evidence use check_domains instead. Requires the naming:read scope.
| Name | Required | Description | Default |
|---|---|---|---|
| tasks | Yes | 1-20 independent search tasks. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden and exceeds it: it discloses the return format ('dated raw results and nothing else'), non-behaviors ('does not score, rank, decide whether a collision is real, or constitute trademark clearance'), the required scope ('naming:read'), and the 20-search limit. This is rich, honest behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action, then expands with purpose and limitations. Every sentence earns its place: purpose, authorship, output scope, follow-up action, alternative tool, and auth requirement. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, the description fully explains what to expect (dated raw results only) and how to proceed (attach to board via move_name_candidates). It also covers the scope requirement and the domain alternative, making it complete for an agent to select and invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline 3 applies. The description adds meaningful context by explaining that the agent authors the queries and is limited to 20 tasks, and emphasizes query purpose ('Write it for the specific risk you are testing'), which supports correct use of the query field beyond the schema's literal description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('run web searches'), names the resource ('a candidate name'), and enumerates concrete risk types (collision, market context, meaning, unfortunate readings, negative associations, official registers). It clearly distinguishes from siblings by naming check_domains as the alternative for domain/DNS evidence.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use this tool ('you know what would disqualify this particular name'), what it covers, and an explicit exclusion: 'For domain registration and DNS evidence use check_domains instead.' It also clarifies that it is not trademark clearance, hedging against misuse.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_themesGet themes to rank for a productA
Return the entire catalog at once, unranked, as compact summaries carrying each kit's moodSummary, vibeTags, tags, audience, and a font and palette glimpse, so you can judge fit yourself. Despite the name it runs no server-side search: query is echoed back to keep your brief in context, and the ordering is neutral. Use it when the brief is subtle or cuts across categories and you would rather weigh every option than trust a ranking. Prefer list_themes when the brief maps cleanly onto a use case or search phrase, since it ranks the catalog for you and pages rather than returning everything. Neither tool narrows the catalog; the difference is ranked and paged against unranked and all at once. Read the summaries, pick one to three, then get_design_md to read the full brief or apply_theme to write it into the project. Read-only and free.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Your brief: the product, its audience, and the intended mood, e.g. 'fintech dashboard for SMBs, calm and trustworthy'. It frames your own ranking and is not sent to a matcher. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully discloses key behaviors: it candidly admits 'runs no server-side search,' explains that `query` is echoed back, states the ordering is neutral, and notes the output is the entire catalog rather than a filtered set. It also declares 'Read-only and free,' which is essential safety information for an agent. This goes far beyond a generic tool description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Although longer than a typical one-liner, every sentence earns its place: the first sentence front-loads the core action, subsequent sentences handle the misleading name, usage guidance, comparison, follow-up, and safety. The structure flows logically from what → name caveat → when → alternatives → next steps, with no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite the absence of an output schema, the description specifies exactly what will be returned (moodSummary, vibeTags, tags, audience, font/palette glimpse) and what the agent should do next (pick 1-3, then get_design_md or apply_theme). The tool's full behavior—including its limitations and relationship to siblings—is captured, making it complete for an agent to select and invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already describes `query` as the brief with an example, so baseline coverage is high (100%). The description adds meaningful nuance by explaining that `query` is not sent to a matcher but 'echoed back to keep your brief in context,' clarifying its actual role. This extra semantic context is valuable, though not transformative since the schema already handles the basic meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states a specific action—'Return the entire catalog at once, unranked, as compact summaries'—and enumerates the contained fields, making the tool's function unmistakable. It also explicitly distinguishes itself from the sibling tool list_themes by contrasting unranked/full versus ranked/paged, so there is no confusion about its role.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use guidance: 'Use it when the brief is subtle or cuts across categories and you would rather weigh every option than trust a ranking.' It also names the alternative, 'Prefer list_themes when the brief maps cleanly onto a use case or search phrase,' and clarifies the difference. Follow-up steps (get_design_md, apply_theme) further complete the usage picture.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_trademarksSearch EUIPO trademarksA
Screen one owned naming candidate against EUIPO's verbal-element register, optionally within up to 10 Nice classes. This uses Identity Forge's shared EUIPO daily, burst, fair-share, and provider-cooldown quota; a 429 includes the allowance and retry timing. Results are preliminary evidence, not a similarity verdict or legal clearance. Requires naming:read.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Verbal element to search. | |
| projectId | Yes | Owned naming project id from list_naming_projects. | |
| niceClasses | No | Nice class numbers relevant to the product, e.g. 9 and 42. | |
| nameSuggestionId | Yes | Candidate id from list_name_candidates. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does an excellent job: it discloses the shared quota system (daily, burst, fair-share, provider-cooldown), the meaning of a 429 response, the permission requirement (naming:read), and the caveat that results are not a legal verdict. This is rich behavioral context beyond merely stating the operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no wasted words: the first states the core function, the second covers quota behavior, and the third covers permissions and result caveats. Information is front-loaded and each sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 4 parameters, no output schema, and no annotations, the description provides solid context: purpose, constraints, quota, permissions, and result interpretation. It doesn't describe the return format, but for a search tool with no output schema, the description is quite complete. Minor gap is lack of pagination or response shape details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters. The description adds minimal extra meaning beyond what's in the schema, only reinforcing the optionality of Nice classes and the 'owned naming candidate' context. This aligns with the baseline score of 3 when schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's specific action: 'Screen one owned naming candidate against EUIPO's verbal-element register' with optional Nice class filtering, which distinguishes it from sibling tools like search_name_evidence and check_domains. The verb 'screen' and the resource (EUIPO verbal-element register) make the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool (when you have a naming candidate to check against EUIPO) and sets expectations about results being preliminary evidence. However, it does not explicitly name alternative tools or provide exclusion criteria, so it falls short of a 5 but provides clear context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_project_contextReplace a project's contextA
Store what the product is, so every later proposal is grounded in it and you never re-send a paragraph of prose. This REPLACES the whole context: nothing is merged, so any field you leave out is deleted, not kept. That is deliberate — a merging update would let you drop a surface from the list and silently keep the old one — but it means the safe way to edit is get_project_context first, then send the whole object back with your change applied. product is the only required field and must be a real sentence rather than a label; a description under 12 characters is refused, because a proposal built on one reads as grounded while being generic. Every string is bounded and an over-long field is refused by name rather than truncated, so nothing is silently cut. Requires the kits:write scope; reading needs only kits:read.
| Name | Required | Description | Default |
|---|---|---|---|
| avoid | No | Directions already ruled out, in the user's own words. "We tried playful and customers hated it" is worth more here than any other field. | |
| moods | No | Mood ids from the discovery vocabulary; the feel being aimed at. | |
| stack | No | What the brand has to be implemented in. Free text, so an unrecognised stack is read by the model rather than rejected. | |
| product | Yes | What the product does, in a sentence or two. The one field a proposal cannot be specific without. | |
| audience | No | Who uses it. | |
| industry | No | Industry id from the discovery vocabulary. | |
| surfaces | No | The screens the product has. This is what narrows candidates: a kit judged unfit for every surface is not a candidate. An empty list is honest and common early on. | |
| projectId | Yes | Owned brand project id from list_brand_projects. | |
| constraints | No | What the design must respect: an accessibility target, a parent brand, an existing component library, a locale, a regulator. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden and excels: it discloses that the operation replaces the entire context (omitted fields are deleted), explains the deliberate rationale, notes refusal of under-length product descriptions and over-long strings, and states authentication requirements. This is thorough behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is six sentences, front-loaded with the purpose, and every sentence adds critical information: replacement semantics, rationale, safe editing workflow, validation rules, and auth. No wasted words; structure is logical and easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having 9 parameters, nested objects, and no output schema or annotations, the description covers purpose, destructive behavior, editing workflow, validation constraints, and permissions. This makes it highly complete for a complex write operation, even without describing return values.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds meaningful behavioral semantics beyond the schema: product must be a real sentence (not just a label), omitted fields are deleted, and bounded strings are refused by name rather than truncated. This enriches parameter understanding but doesn't detail every nested field since the schema already does.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it stores product context for later proposals and explicitly says it 'REPLACES the whole context', which distinguishes it from the read-only get_project_context and other project tools. The verb and resource are specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly tells users the safe way to edit: call get_project_context first, then send the whole object back with changes. It also specifies the required kits:write scope versus kits:read for reading, providing clear when-to-use and alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
similar_themesFind similar themesA
Find published kits close to one you already have, ranked by palette proximity, shared tags, and audience. Use it when the user likes a direction but wants options, or when a candidate is nearly right and you want neighbours to compare. It needs an existing slug, so start from list_themes or search_themes if you do not have one yet. Returns compact summaries with a similarity score; judge the actual fit yourself, since proximity in palette and tags is a starting point rather than a verdict. Read-only and free, and it lists Pro kits without exposing their contents.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Permanent id or slug of the kit to find neighbours for. Prefer the id: it never moves, while a slug can be renamed and a retired slug keeps resolving through an alias. | |
| limit | No | How many to return, 1-10, default 4. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses that the tool is read-only and free, that it lists Pro kits without exposing their contents, and that the similarity score is a starting point rather than a verdict. This goes beyond the bare minimum.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Five sentences, each earning its place: purpose, usage, prerequisite, interpretation, and behavioral disclosure. No fluff, front-loaded with purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-param read-only tool with no output schema, the description covers what it returns, how to use it, what to watch out for, and when to choose it. This is fully complete for an agent to invoke. The sibling set includes list_themes/search_themes and recommend_kits, and the description clearly situates similar_themes among them.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already covers both parameters with 100% coverage. The description reinforces the need for an existing slug but does not add new parameter details beyond the schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource: 'Find published kits close to one you already have, ranked by palette proximity, shared tags, and audience.' This clearly distinguishes it from searching or listing tools by focusing on similarity to an existing kit, and mentions ranking criteria.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use ('when the user likes a direction but wants options, or when a candidate is nearly right and you want neighbours to compare') and provides a prerequisite with alternative tools ('start from list_themes or search_themes if you do not have one yet'). Also advises to judge fit yourself, setting expectations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_brand_variationUpdate a brand variationA
Edit one brand proposal already attached to a project, in place. This OVERWRITES the stored variation, and the client sees the new version the moment they next load the share link, including a client who has the page open right now, so treat it as publishing rather than drafting. Send only the fields that move; passing null for brandName, domain, label or notes clears that field rather than leaving it. Changing kitSlug repoints the proposal at a different design kit, which re-checks that you can resolve that kit and that a Pro kit has an entitled key behind it. Use it to act on client feedback from list_client_comments without making the client re-review a whole new set of directions. Add a new direction with add_brand_variation instead when the old one should stay on the board. Requires the kits:write scope.
| Name | Required | Description | Default |
|---|---|---|---|
| label | No | New short label the client sees, e.g. 'Bold direction', or null to clear it. | |
| notes | No | New rationale shown alongside it, or null to clear it. | |
| domain | No | New domain to display, or null to clear it. | |
| kitSlug | No | Repoint the proposal at this kit: your own, a catalog kit, or another user's public kit. | |
| brandName | No | New brand name to display, or null to clear it. | |
| projectId | Yes | Owned brand project id from list_brand_projects. | |
| variationId | Yes | Id of a variation in that project, as returned by add_brand_variation or reorder_brand_variations. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and excels: it discloses overwriting, live client visibility, null-clearing semantics, kit repointing validation, and the publishing-like nature. This goes well beyond what the schema alone would convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence adds meaningful information, from overwrite behavior to null handling to the alternative tool. It is front-loaded with the core action and doesn't waste words, though it is longer than a minimal description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with complex side effects, the description covers purpose, usage context, parameter semantics, permissions, and behavioral consequences (live publishing, kit validation). There is no output schema, so return values are not explained, but that is less critical given the rich behavioral context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents all parameters at 100% coverage with descriptions, including null-to-clear behavior. The description adds useful patch semantics ('Send only the fields that move') and explains the kitSlug behavior beyond the schema's basic description, so it adds value over the structured data.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool edits an existing brand proposal in place, and distinguishes it from adding a new direction by explicitly naming add_brand_variation as the alternative. It also highlights the overwrite/publishing nature, which distinguishes it from other brand variation operations like reorder or remove.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It specifies when to use the tool: to act on client feedback from list_client_comments without making the client re-review a whole new set. It also explicitly says to use add_brand_variation instead when the old one should stay on the board, and notes the required kits:write scope.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_themeUpdate a saved design kitA
Edit a design kit you already saved, in place. This OVERWRITES the stored kit without asking: the slug, id and publication state all stay the same, so everything already pointing at that kit follows the edit, including brand variations that reference it, any client share link that serves it, and a repo that installed its registry entry. The overwrite itself has no undo, but it is recorded: every save mints a version, so the state you replaced stays readable through list_kit_versions and get_kit_version, and diff_kit_versions shows exactly what your edit moved. Reach for remix_theme instead when you want the original left alone, which is usually the right call while you are still exploring directions; use this one when the kit is the brand and the brand has genuinely changed. It only edits kits saved under your key. A catalog kit, another user's kit, or an unknown slug all return 404 alike. kit is deep merged over the stored payload, so you state only what moves and everything else survives, and overrides applies on top of that merge. The one thing you cannot change is the slug itself: it is the kit's public handle and moving it would break every link already using it, so a payload carrying a different slug is rejected with 400 rather than quietly ignored. Pass expectedUpdatedAt from the last read to get a 409 instead of silently overwriting a change someone else made in between; the 409 body carries the current marker so you can re-read, reapply and retry. Requires the kits:write scope.
| Name | Required | Description | Default |
|---|---|---|---|
| kit | No | Partial kit JSON, deep merged over the stored kit. Unmentioned fields are kept. A `slug` different from the kit's own is rejected. | |
| name | No | New display name. Omit to leave the name unchanged. | |
| slug | Yes | Permanent id or slug of a kit saved under your own key. Catalog and other users' kits are not editable. | |
| overrides | No | Token, color, font and facet writes applied on top of the merged kit. | |
| expectedUpdatedAt | No | The updatedAt you last read for this kit. Pass it to reject the write with 409 if the kit changed meanwhile. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden, and it excels: discloses overwrite-without-undo, versioning, deep merge behavior, slug immutability with 400 rejection, 404 uniformity, optimistic concurrency with 409 and retry flow, and required scope. This is exceptional behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence earns its place. It front-loads the core overwrite action, then systematically covers versioning, alternatives, scope, merge behavior, slug restriction, concurrency, and auth—all in a logical order with zero filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex mutation tool with 5 params, nested objects, no output schema, and no annotations, the description covers all essential contexts: behavior, side effects, error cases, concurrency, scope, and alternatives. It leaves no material ambiguity for an AI agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although schema coverage is 100%, the description adds crucial semantics beyond field labels: it explains the deep merge for `kit`, that `overrides` applies on top, why slug changes are rejected, and how `expectedUpdatedAt` enables concurrency control. This transforms raw parameters into an actionable mental model.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear, specific verb and resource: 'Edit a design kit you already saved, in place.' It immediately distinguishes itself from siblings like remix_theme (copy) and create_theme (new kit), and the overwrite semantics are unambiguously stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance is given: 'Reach for remix_theme instead when you want the original left alone... use this one when the kit is the brand and the brand has genuinely changed.' It also clarifies scope (only kits saved under your key, others return 404), giving clear when-to and when-not-to.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
whoamiWhat this API key can doA
Your plan, the scopes this key holds and the ones it lacks, how much of the monthly quota is left, your AI credit balance, and how many saved-kit slots remain. Call it before promising a user something the key cannot deliver: every one of these limits is otherwise discoverable only by hitting it, as a 403 for a missing scope or a locked Pro kit, a 429 for quota, a 402 for credits, or a refused save at the free tier's kit cap. This call is free. It spends no quota units and no AI credits, and it is deliberately never refused for being over quota, so it still answers after a 429 has already happened and is safe to call first. Any valid key may read its own entitlements, whatever scopes it holds.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses that the call is free, spends no quota or credits, is never refused for over quota, works even after a 429, and that any valid key may read its own entitlements. This goes beyond basic expectations and covers cost, failure modes, and access control.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences but each sentence earns its place: first lists returns, second gives usage rationale, third covers cost and access. It is front-loaded with the most important information and contains no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema exists, the description adequately describes the returned data. It also covers when to call, cost, reliability, and authorization, making it complete for a zero-parameter informational tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters and schema coverage is 100%, so the baseline is 4. The description does not need to explain parameters, but it enriches understanding by detailing the return fields (plan, scopes, quota, credits, kit slots), which adds semantics beyond the empty schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns the current API key's plan, scopes, quota, credit balance, and saved-kit slots. This is a specific verb+resource (read entitlements) and is distinct from sibling tools like list_mockup_jobs or get_kit_version. The title 'What this API key can do' reinforces the purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use guidance: 'Call it before promising a user something the key cannot deliver.' It also explains the alternatives (encountering 403, 429, 402 errors) and states the tool is safe to call first, giving a clear decision rule.
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.
61 tool updates
v0.1.0- First observed
add_brand_layer - First observed
add_brand_variation - First observed
add_name_candidates - First observed
apply_theme - First observed
check_applied_theme - First observed
check_domains - First observed
create_brand_project - First observed
create_naming_project - First observed
create_theme - First observed
delete_theme - First observed
diff_brand_project_versions - First observed
diff_kit_versions - First observed
export_brand - First observed
generate_mockups - First observed
generate_names - First observed
get_brand_layers - First observed
get_brand_project - First observed
get_brand_project_version - First observed
get_design_md - First observed
get_image_direction - First observed
get_interface_style - First observed
get_kit_history_event - First observed
get_kit_version - First observed
get_mockup_job - First observed
get_naming_research_context - First observed
get_page_recipe - First observed
get_project_context - First observed
get_tokens - First observed
list_brand_project_versions - First observed
list_brand_projects - First observed
list_client_comments - First observed
list_image_directions - First observed
list_interface_styles - First observed
list_kit_history - First observed
list_kit_versions - First observed
list_mockup_jobs - First observed
list_name_candidates - First observed
list_name_generations - First observed
list_naming_projects - First observed
list_naming_recipes - First observed
list_page_recipes - First observed
list_themes - First observed
match_palette - First observed
move_name_candidates - First observed
rank_name_candidates - First observed
recommend_kits - First observed
remix_theme - First observed
remove_brand_layer - First observed
remove_brand_variation - First observed
reorder_brand_variations - First observed
revoke_brand_share - First observed
search_name_evidence - First observed
search_themes - First observed
search_trademarks - First observed
set_project_context - First observed
share_brand_project - First observed
similar_themes - First observed
update_brand_share - First observed
update_brand_variation - First observed
update_theme - First observed
whoami
TDQS
Scored across 61 tools
Most tools have clearly distinct purposes within their domains, but there are near-duplicate pairs like list_themes/search_themes and list_kit_versions/list_kit_history that could lead to misselection despite detailed descriptions. The descriptions do an excellent job of explicitly disambiguating, so confusion is unlikely for a careful agent.
Tool names follow a consistent verb_noun pattern (list_, get_, create_, update_, delete_, remove_, etc.) across all domains. The only exception is whoami, which is a common MCP convention and does not break the pattern.
With 61 tools, the server is far beyond the typical well-scoped range of 3-15, and exceeds the 50+ threshold for 'extreme mismatch'. While the breadth covers multiple subdomains, the sheer number makes it overwhelming and difficult for an agent to navigate.
The tool surface is remarkably comprehensive, covering design kit lifecycle, brand project management, naming, mockups, page recipes, image directions, and interface styles. However, there is no way to delete a brand project or naming project, or update a naming project's brief, leaving minor dead ends. Overall, the domain is well-covered.
Maintenance
Related MCP Connectors
Jinn gateway MCP — brand DNA, brand kits, design systems, and agency tools behind one bearer token.
Brand-safe MCP for AI agents to create editable, on-brand graphics and automate variants.
MCP server for building and testing AI agents with multi-model experimentation and insights.
MCP server for AI agent profiles and smart notes. 60+ coding prompt packs with expert personas.
Related MCP Servers
- FlicenseAqualityDmaintenanceAn MCP server that allows coding agents to look up contextual rules and patterns on demand, providing just-in-time guidance for specific tasks like writing tests or authoring UI.28-
- AlicenseNot gradedqualityCmaintenanceMCP server that exposes your design system components and tokens to AI agents, preventing duplicate component creation and hardcoded token values.99MIT
- AlicenseNot gradedqualityAmaintenanceA read-only MCP server that provides AI coding agents with a queryable contract for design system tokens, components, patterns, and anti-patterns.121Apache 2.0
- AlicenseBqualityDmaintenanceAn MCP server that drives Anthropic's Claude Design from agentic coding CLIs, providing tools to create, generate, iterate, and export design systems without a browser.32MIT