Skip to main content
Glama

CoDesign

The design layer for the agent era.

CoDesign gives your coding agent a real design engine. Generate, edit, and automate fully editable designs — print, social, and video — straight from the chat, then export print-ready PDFs, images, and more. You steer, the agent edits the same scene, and you keep control of the outcome.

It ships as an MCP server (plus a Claude Code plugin) that hands your agent IMG.LY's CE.SDK CreativeEngine — the same production engine behind IMG.LY's commercial SDKs. Every recipe below spawns the published npm package @imgly/codesign-mcp over stdio; no separate install step — npx fetches it on first use.

What you can make

Ask your agent, in plain language:

  • "Design a 3-panel Instagram carousel announcing our launch, on-brand."

  • "Resize this poster to A4 with print bleed and export a print-ready PDF."

  • "Localize this flyer into German and re-fit the layout to the new text."

  • "Generate five color variants of this template so I can pick one."

Related MCP server: Photoshop MCP Server

How it works

Three layers, one product:

  • The plugin — skills, slash commands, and an embedded design handbook your agent draws on to design well (brand, localize, resize, and quality-check its own output). This is the piece you install.

  • The MCP server (@imgly/codesign-mcp) — exposes the design tools (edit, preview, export, list, history, …) over MCP, driven by tool calls from any agent host.

  • The CE.SDK CreativeEngine — IMG.LY's real, headless design engine that does the actual layout, rendering, and export.

Licensing

This repository — the Claude Code and Codex plugins, marketplace manifests, skills and documentation — is released under the MIT License. The CoDesign engine itself, distributed as the npm package @imgly/codesign-mcp, is proprietary software from IMG.LY and free to use locally. The full terms ship inside the package as LICENSE.md.

Why a real engine matters

Every other design agent draws on a web canvas — a quick fix that breaks on the hard problems. CoDesign commands a production engine matured over years across print, video, and social:

  • True print & color fidelity — CMYK, bleed, and ICC profiles, not just RGB screen output.

  • Deterministic output — renders identically everywhere, independent of browser or config.

  • Native performance — a purpose-built engine that stays fast at scale and under heavy assets.

  • Full compatibility — imports InDesign, PSD, PDF, and Lottie; exports print-ready PDF, image, video, and HTML.

Requirements & known limitations

Read this first — the failure modes below are silent.

  • Node.js ≥ 22.15 is required and is not provided. The server runs on your system Node. With no Node (or Node < 22.15) on PATH, the host reports the server as failed with no useful reason — typically local: 0 and MCP error -32000. Install Node 22.15+ first: https://nodejs.org.

  • Pin @latest — it's in every recipe on purpose. A bare, unpinned npx caches the package and goes stale; because each release carries a rolling 30-day trial license, a stale copy eventually stops working.

  • Windows is not supported under bare npx. Hosts that spawn npx directly hit spawn npx ENOENT (anthropics/claude-code#58510). Use WSL for now; a native Windows launcher is coming.

Install

Claude Code

Install the plugin from the marketplace:

claude plugin marketplace add imgly/codesign
claude plugin install codesign@imgly-codesign

Or add the MCP server directly, without the plugin:

claude mcp add codesign -- npx -y @imgly/codesign-mcp@latest stdio

Codex

Install the plugin from the marketplace:

codex plugin marketplace add imgly/codesign
codex plugin add codesign@imgly-codesign

Or add the MCP server directly, without the plugin:

codex mcp add codesign -- npx -y @imgly/codesign-mcp@latest stdio

Antigravity CLI

Clone the repo and install the plugin folder:

git clone https://github.com/imgly/codesign
agy plugin install ./codesign/plugins/codesign

Or add the MCP server directly, without the plugin:

agy mcp add codesign -- npx -y @imgly/codesign-mcp@latest stdio

Gemini CLI

Gemini CLI now serves Gemini Code Assist Standard/Enterprise and API-key accounts; on a personal Google account, use Antigravity CLI above.

Install as an extension straight from the public repo:

gemini extensions install https://github.com/imgly/codesign

Or add the server manually to ~/.gemini/settings.json:

{
  "mcpServers": {
    "codesign": {
      "command": "npx",
      "args": [
        "-y",
        "@imgly/codesign-mcp@latest",
        "stdio"
      ]
    }
  }
}

Other MCP hosts

Every other host spawns the same stdio server — only the config file and the top-level key differ. Add this block to the host’s MCP config:

{
  "mcpServers": {
    "codesign": {
      "command": "npx",
      "args": [
        "-y",
        "@imgly/codesign-mcp@latest",
        "stdio"
      ]
    }
  }
}

Host

Config file

Note

Cursor

.cursor/mcp.json

as-is

Windsurf

~/.codeium/windsurf/mcp_config.json

as-is

VS Code

.vscode/mcp.json

use the key servers instead of mcpServers

Zed

settings.json

use the context_servers shape below

VS Code (servers key):

{
  "servers": {
    "codesign": {
      "command": "npx",
      "args": [
        "-y",
        "@imgly/codesign-mcp@latest",
        "stdio"
      ]
    }
  }
}

Zed (context_servers):

{
  "context_servers": {
    "codesign": {
      "command": {
        "path": "npx",
        "args": [
          "-y",
          "@imgly/codesign-mcp@latest",
          "stdio"
        ]
      }
    }
  }
}

Beyond your machine

CoDesign runs free on your machine today. When you need more — always-on hosting, your own infrastructure (VPC / on-prem), or a fully bundled design agent that lives in the canvas — the same building block graduates by changing config, not vendors. No lock-in. Talk to us: support@img.ly.

Support

Questions or issues: support@img.ly. This distribution is generated from IMG.LY's source repository.

Available Tools

19 tools
asset_addA

Add a local image or font file to the workspace so it can be used in a design. Copies the file bytes into the content-addressed asset store at assets/<sha>.<ext>. The bring-your-own arm of the asset family: asset_search finds an existing asset, asset_generate makes one, asset_add takes one off your disk — all three return a workspace:// uri to embed in edit. (To turn a design FILE into a new design, use import.)

Returns JSON: { uri, httpUrl, mimeType, kind, bytes, note? }. uri (a workspace:// URI) is the durable handle — embed it in a subsequent edit (image fill, or engine.asset.apply; for a font, as both setFont's uri and typeface.fonts[].uri), NEVER httpUrl and NEVER the original file:// path, so the design stays loadable after a restart or rewind. httpUrl is a fetch link for opening the asset now.

Files are classified by content (magic bytes) first, extension second: a misnamed file is stored under its actual type, and note explains any correction, rescue, or unverifiable content.

Make-available only: it never edits a scene and never creates a revision — do the placement in edit.

Source: { path } — an absolute path to a file the server can read. Local-only (this backend shares your disk); on a hosted server this arm is not offered.

ParametersJSON Schema
NameRequiredDescriptionDefault
sourceYes

TDQS

A4.9/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden, and it delivers: it explains the side effect (copies bytes), the storage location (assets/<sha>.<ext>), the classification logic (magic bytes first), the fact it never edits a scene or creates a revision, and the local-only constraint. It also warns against using httpUrl or the original file path for embedding, which is critical for durability. 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.

Conciseness4/5

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

The description is long but well-organized, with purpose, usage, return format, classification, and constraints in separate paragraphs. Every sentence adds value, though it could be tightened slightly without losing critical information. It is front-loaded with the core purpose and then expands into necessary detail.

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

Completeness5/5

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

Despite having only one parameter, a nested source object, no output schema, and no annotations, the description covers everything an agent needs: return format, how to use the uri in edit, classification behavior, and the local-only limitation. It is fully self-sufficient for correct invocation.

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

Parameters5/5

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

Schema description coverage is 0%, so the description must compensate. It does: it explains the source object's structure ({ path }), that path must be absolute and readable by the server, and that it is local-only. This adds meaning beyond the schema's terse description and fully clarifies the single parameter.

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

Purpose5/5

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

The description states a specific verb ('Add'), resource ('local image or font file'), and purpose ('so it can be used in a design'). It also differentiates itself from siblings by naming asset_search and asset_generate as the alternatives for finding and generating assets, and import for turning design files into designs. This makes the tool's role unmistakable.

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

Usage Guidelines5/5

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

It explicitly contrasts with asset_search and asset_generate, and provides a clear when-to-use rule: use this when you have a file on disk. It also states when not to use it (never for placement, use edit) and points to import for a different scenario. This gives the agent unambiguous selection criteria.

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

asset_generateA

Generate images (text-to-image, image-to-image) via the IMG.LY AI gateway.

Call with NO arguments first: returns the model catalog — pick a model, then call again with model + prompt (+ optional format aspect like "16:9").

For image-to-image, pass image_uris with workspace:// URIs (from import or earlier generations).

The first content part is JSON: { uri, httpUrl, mimeType, bytes }. uri (a workspace:// URI) is the durable handle — embed it in subsequent edit calls. httpUrl opens the asset directly. The parts after it are a labeled thumbnail of each generated image — look at them; the JSON alone does not tell you what was drawn.

Multi-output models (layerize-class: decompose an input image into layers) add an assets array to that JSON — one entry per image, { index, uri, httpUrl, mimeType, bytes }, in stack order (residual background first, then cutout layers). The top-level fields mirror assets[0]. Single-output results carry no assets array. Any non-image output the model produced is passed through VERBATIM under metadata — read it, it binds semantics to the assets (layerize, for example, ships a layers list in assets order with names, z order and bounding boxes in source pixels; cutouts are cropped to content, so place them by their bounding box).

Requires a free IMG.LY sign-in (the login tool); all other design tools work without an account.

ParametersJSON Schema
NameRequiredDescriptionDefault
modelNoModel id from the catalog (call with no arguments to list). Required to generate.
formatNoAspect ratio, e.g. "16:9" or "1:1".
promptNoWhat to generate. Required together with `model`.
image_urisNoworkspace:// image URIs used as inputs (image-to-image models).

TDQS

A4.7/5.0
Behavior5/5

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

There are no annotations, so the description carries the full disclosure burden. It covers the no-argument catalog response, the structured first content part, durable workspace URIs, labeled thumbnails, multi-output assets in stack order, verbatim metadata, and the sign-in requirement — substantially more behavioral context than basic operation.

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

Conciseness5/5

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

The description is long but warranted by the tool's complexity: invocation pattern, output format, multi-output behavior, and auth are each in their own focused segment. It is front-loaded with the core generation purpose and every sentence adds necessary routing or output semantics.

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

Completeness5/5

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

With no output schema and no annotations, this definition covers what an agent needs to call the tool correctly: how to discover models, required parameters, optional format, image inputs, return-content structure, multi-output semantics, and the login prerequisite. Nothing essential is missing.

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

Parameters4/5

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

Schema coverage is 100% so the baseline is 3, but the description adds meaningful operational meaning: model requires first listing the catalog, prompt pairs with model, format is an optional aspect such as 16:9, and image_uris come from import or earlier generations as workspace URIs. This goes beyond the schema's brief parameter descriptions.

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

Purpose5/5

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

The description opens with a specific action and resource: 'Generate images (text-to-image, image-to-image) via the IMG.LY AI gateway.' It further distinguishes generation from siblings by describing the no-argument catalog workflow and noting that generation requires login while 'all other design tools work without an account.'

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

Usage Guidelines4/5

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

It gives explicit invocation guidance: 'Call with NO arguments first,' then call again with model and prompt, and for image-to-image pass image_uris. It also states the login prerequisite, but it does not explicitly name a when-not-to-use alternative or contrast with sibling tools such as edit or import beyond the mention of embedding URIs in subsequent edit calls.

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

changesA

Check whether the user changed a design in the browser editor since you last touched it.

Pass the revision you believe is current — normally the one your last edit returned. The reply says whether it is still the design head and lists what was written since, oldest first, with each revision's diff note and whether it came from the editor (origin: "editor") or from your own edit.

Call this before your first edit of a design whenever the user may have had the view page open: edit REJECTS a parent whose path to the head contains one of the user's editor saves, so this is how you find the parent to build on.

ParametersJSON Schema
NameRequiredDescriptionDefault
revisionYesRevision you believe is current — normally the one your last `edit` returned.

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, the description carries the full disclosure burden. It explains the reply: whether the revision is still the design head, what was written since, ordering oldest first, diff notes, and the `origin` field. It does not explicitly state it is non-mutating, but 'check' and the described reply imply a read-only operation.

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

Conciseness5/5

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

The description is front-loaded with the purpose, followed by the reply structure and the critical call timing. Each paragraph earns its place, and the mention of `edit` rejection is essential context rather than filler.

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

Completeness5/5

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

Given a single required parameter and no output schema or annotations, the description covers everything needed: what the tool checks, what to pass, what the reply contains, and when it should be called. Nothing essential is missing.

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

Parameters3/5

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

Schema description coverage is 100%, and the schema already says 'Revision you believe is current — normally the one your last `edit` returned.' The description repeats this guidance and adds workflow context, but it does not convey substantially new parameter semantics beyond the schema.

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

Purpose5/5

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

The first sentence states a specific verb and resource: 'Check whether the user changed a design in the browser editor since you last touched it.' It also names the workflow relationship to `edit` and `view`, distinguishing it from sibling tools like `history` or `inspect`.

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

Usage Guidelines4/5

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

The description gives an explicit trigger: 'Call this before your first `edit` of a design whenever the user may have had the `view` page open.' It explains the consequence of not doing so by noting that `edit` rejects a parent containing editor saves. It does not name an alternative tool, but the condition is clear.

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

checklistA

Register the brief's ACCEPTANCE CHECKLIST for a design — the machine-checkable claims that must hold before the work counts as done. Do this right after intake, before the first edit: extract from the brief every required output file, every string of approved copy that must land verbatim, and note the constraints only you can check.

Item kinds:

  • { kind: 'output', path } — a file that must exist when the design is delivered (absolute path, e.g. every variant the brief orders exported).

  • { kind: 'copy', text } — approved copy that must appear VERBATIM in the design's text (whitespace variants are folded before comparing; wording, case and punctuation are exact).

  • { kind: 'note', text } — a self-check the server cannot verify (e.g. "layout structure unchanged from master"). Kept on record; never machine-checked.

Every export verifies the current checklist against the deliverable and lists unmet items in its result — treat an unmet item exactly like a failing test: finish the work, or re-register the checklist without the item if it is genuinely obsolete. Calling checklist again REPLACES the whole list for this design.

Returns: { ok, itemCount, rootRevision } — or the current checklist when called with only revision (no items).

ParametersJSON Schema
NameRequiredDescriptionDefault
itemsNoThe full checklist (max 64 items) — replaces any previously registered list. Omit to read the current checklist instead.
revisionYesAny revision id of the design (the checklist attaches to the design's whole lineage).

TDQS

A5/5.0
Behavior5/5

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

With no annotations, the description carries the full burden and delivers richly: it discloses that calling again REPLACES the whole list, that copy comparisons fold whitespace but treat wording/case/punctuation as exact, that note items are never machine-checked, that every export verifies the checklist, and the exact return shape. No behavioral surprise is left undisclosed.

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

Conciseness5/5

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

The description is long but every sentence earns its place. The lead sentence front-loads the core purpose; the item-kind bullets are necessary because the schema cannot convey these semantics; and the export-interaction and replacement warnings are essential operational facts. No filler or repetition.

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

Completeness5/5

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

Given no output schema and no annotations, the description is fully self-sufficient: it covers return values, item-kind semantics, replacement behavior, lifecycle timing, and failure-handling. An agent can invoke this tool correctly on the first attempt with zero information beyond the description.

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

Parameters5/5

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

Although schema coverage is 100%, the description dramatically expands meaning beyond the bare field names: it defines each kind's semantics (output = absolute path that must exist; copy = verbatim with whitespace folding; note = never machine-checked), explains the read mode when only revision is passed, and documents the return object. This far exceeds the baseline-3 bar.

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

Purpose5/5

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

The description states a specific verb+resource: 'Register the brief's ACCEPTANCE CHECKLIST for a design — the machine-checkable claims that must hold before the work counts as done.' It is immediately distinguishable from siblings like export (which verifies the checklist), scorecard (which presumably grades), and edit/preview (which mutate/view the design).

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

Usage Guidelines5/5

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

It gives explicit timing ('Do this right after intake, before the first edit'), specifies what to extract from the brief (output files, verbatim copy, self-check notes), and explains how unmet items interact with export ('treat an unmet item exactly like a failing test: finish the work, or re-register the checklist without the item'). This is actionable when-to-use guidance that also routes the agent's behavior downstream.

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

diagnosticsA

Inspect this codesign MCP server: status (default) reports what is running (build id, CE.SDK engine version, non-secret config); summary returns a bounded digest of recent activity (counts, recent errors, slowest calls); open returns a clickable local viewer URL with a Download-ZIP button to send diagnostics to IMG.LY.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionNostatus (default) | summary | open

TDQS

A4/5.0
Behavior3/5

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

With no annotations, the description carries the burden of behavioral disclosure. It discloses that status reports non-secret config, summary is bounded, and open returns a clickable URL with a Download-ZIP button. However, it doesn't mention side effects (e.g., whether 'open' launches anything or just returns a URL) or any rate limits.

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

Conciseness5/5

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

Three tightly packed sentences, each covering one action with its output. Front-loaded with the tool's purpose and no filler.

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

Completeness4/5

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

For a single-parameter tool with no output schema, the description covers the main behaviors and outputs. It could mention whether 'open' has side effects or how the viewer URL is delivered, but overall it's sufficient for an agent to call it correctly.

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

Parameters3/5

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

Schema coverage is 100% and the enum values are described in the schema. The description adds meaningful context for each action value, but since the schema already lists them, the added value is moderate. Baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly identifies the tool as inspecting the codesign MCP server and enumerates three distinct actions (status, summary, open) with specific outputs. It distinguishes itself from siblings by focusing on server diagnostics rather than assets, editing, or auth.

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

Usage Guidelines4/5

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

The description explains what each action returns and notes that status is the default, giving an agent clear context for choosing an action. It doesn't explicitly state when to use this tool versus alternatives, but the diagnostic scope is clear enough that an agent can infer when it's appropriate.

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

editA

Edit the CE.SDK canvas by running JavaScript against the live CreativeEngine, then commit the result as a new revision.

⚠ Call skill({ name: 'handbook' }) BEFORE your first edit. It documents the design loop, the typeface schema, and the engine recipes; on cryptic errors, query its quirks.md.

REQUIRED: parent is a revision id (returned by a previous edit), or the JSON null literal (no quotes) to start a new design. Omitting it is an error — there is no implicit 'continue from wherever'. In a fresh conversation, a request for a new design means parent: null — never resume a workspace design the user didn't reference.

Returns: the first content part is JSON { revision, parent, names? } — store revision so you can pass it as parent on the next edit. names lists every named block in the committed scene: those are exactly the strings engine.design.findByName(name) resolves in your NEXT edit, so name what you build and re-find it instead of matching copy. When the edit changed the scene, the result also ends with a downscaled render of the (first) changed page — verify your work from it instead of spending a preview call. preview remains required for full-size judging (the judge loop) and multi-page review; set render: false to skip the image on read-only/diagnostic edits.

code return contract (STRICT): return undefined (no message back), { type: "text", text }, { type: "image", data: "<base64>", mimeType }, or an array of those. Anything else (raw strings, Blobs, plain objects) is rejected.

DIALECT (enforced): mutations go through engine.design (create/build/setProps/…). Code that mutates via engine.block.* is rejected before execution with the equivalent calls; // engine.block: <reason> opts out for calls the facade lacks.

code scope: engine (with engine.design), plus findText(copy) / findAllText(copy) for reaching a block by its text. Use them instead of comparing text strings with === — the copy on the page routinely carries a trailing space or an NBSP (before a /%), which is what makes hand-rolled lookups throw. Matching folds those space variants and trims; a miss lists the copy actually on the page.

Dirty-on-throw: if your code throws, the engine slot is marked dirty and the next edit pays one engine reload (regardless of parent). Do not catch-and-swallow errors that should propagate — let them throw so this safety contract kicks in.

Optional: title (set on parent=null only — the design's display name) and note (a one-liner describing what this edit accomplished — purely descriptive, helps you re-ground after a rewind).

Refused parents: if the user saved changes in the browser editor between your parent and the design head, this edit would discard them, so it is rejected — call changes to see what they did and which revision to build on.

ParametersJSON Schema
NameRequiredDescriptionDefault
codeYesAsync JS body. `engine` is in scope, plus `engine.design` — the preferred nested-props facade; EVERY member returns a Promise (await it): create({ type, name?, props?, children? }, { parent? }), setProps(id, props), getProps(id, select?) — see the api skill. Strict return contract per the handbook.
forkNoSet true ONLY when the user explicitly asked to discard their own browser-editor changes and branch from an older revision. Without it, `edit` refuses a parent whose path to the head contains a save the user made in the editor.
noteNoFreeform descriptive text — what this edit accomplished. Metadata only; never load-bearing.
titleNoDisplay name for the design. Set only when parent=null (creating a new design). For mid-chain renames use the `rename` tool.
parentYesParent revision id from a previous edit (a string). To start a new design root, use the JSON null literal. REQUIRED — there is no implicit default.
renderNoDefault true: a mutating edit's result ends with a downscaled render of the (first) changed page. Set false to skip the image on read-only or diagnostic edits where seeing the canvas adds nothing.

TDQS

A5/5.0
Behavior5/5

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

With no annotations provided, the description carries the full behavioral burden and does so thoroughly. It discloses the revision-commit side effect, the exact return JSON shape, the strict `code` return contract, the engine.design dialect enforcement, the dirty-on-throw engine reload consequence, and the refusal behavior when the user saved changes in the browser editor.

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

Conciseness5/5

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

The description is long but every sentence carries operational value, and it is well structured with bolded labels. Critical constraints like the handbook prerequisite, required `parent`, and return contract are front-loaded, while optional parameters and edge cases are grouped at the end.

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

Completeness5/5

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

Given no output schema and no annotations, the description fully compensates by specifying return values, failure modes, parameter constraints, and relationships to sibling tools. The agent has everything needed to call `edit` correctly and recover from common errors such as refused parents or thrown code.

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

Parameters5/5

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

Although schema coverage is 100%, the description adds substantial meaning beyond the schema: `parent` has no implicit default and must be the JSON null literal for new designs, `code` has a strict return contract and scope rules, `title` only applies when parent=null, `note` is purely metadata, and `render` should be disabled only for read-only or diagnostic edits.

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

Purpose5/5

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

The opening sentence states a specific verb and resource: 'Edit the CE.SDK canvas by running JavaScript against the live CreativeEngine, then commit the result as a new revision.' It clearly differentiates this mutation-and-commit tool from siblings like `preview`, `changes`, and `rename` by defining the edit lifecycle.

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

Usage Guidelines5/5

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

The description gives explicit when-to-use guidance: call `skill({ name: 'handbook' })` before first use, use the returned render instead of `preview` for quick verification, keep `preview` for full-size/multi-page judging, and call `changes` when a parent revision is refused. It also notes that `rename` should be used for mid-chain renames, not `title`.

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

exportA

Export a revision to a final deliverable — format picks it: pdf (print PDF), png/jpeg/webp (image), svg (vector SVG), pdfx (print-ready PDF/X), html (responsive HTML5), imgly (editable design file). Renders blockId — or the whole document when blockId is omitted — and writes the result into the workspace under exports/<shard>/<rev>/ (revision-pinned, deterministic).

Returns JSON: { uri, httpUrl, bytes, format, revision } (plus path when you pass outPath). uri (a workspace:// URI) is the durable handle. httpUrl is a fetch link tied to this process — fetch it to download the bytes to disk, or hand it to the user.

outPath (optional, absolute path including the filename): ALSO write the artifact to that local path — the workspace copy is still written, and the response then carries path. Use it when the file is wanted on disk, and always when your environment cannot fetch localhost URLs (sandboxed harnesses, e.g. Claude Cowork — target your session's outputs folder there).

format=svg is the engine's vector export: text is outlined into paths (renders identically everywhere, but is not editable text in the SVG), and raster images are embedded in the file at source resolution — an SVG of a photo-heavy design can be much larger than its source images.

format=imgly writes a portable, self-contained .imgly design file (scene + all asset bytes bundled) — the inverse of import, and the only format that stays editable. Whole-design only: blockId is not accepted. Every edit already auto-persists to the workspace, so you never need this to keep your work — use it to take an editable copy OUT: hand it to a human, back it up, move it between servers.

format=pdfx runs the print PDF through a PDF/X conversion (Ghostscript): CMYK with an embedded ICC profile and PDF/X conformance markers, ready for a print shop. Tune it via the optional pdfx object — conformance standard (X-4 default / X-3), output profile (fogra39/gracol/srgb/custom), transparency flattening, OutputIntent metadata. Conversion adds a few seconds.

format=html renders ONE page (blockId required — pass a page id) to responsive HTML5. Default is a single self-contained .html (assets inlined; animated designs get a CDN GSAP player injected so the file plays as-is); html: { assets: "external" } delivers html + separate image/font files as one .zip.

ParametersJSON Schema
NameRequiredDescriptionDefault
htmlNoOptions for `format=html` only (invalid with any other format).
pdfxNoOptions for `format=pdfx` only (invalid with any other format). Omit entirely for sensible print defaults: PDF/X-4, fogra39, embedded ICC.
formatYesThe deliverable: pdf → print PDF; png/jpeg/webp → image; svg → vector SVG; pdfx → print-ready PDF/X; html → HTML5 page; imgly → editable design file.
blockIdNoThe page or block to render. Omit to export the whole document — for `format=pdf` a multi-page PDF, for an image format one composite image of all pages. Required for format=html (pass a page id).
outPathNoAbsolute path (including filename) to ALSO write the artifact to — the workspace copy is still written, and the response then carries `path`. Use when you need the file on disk and cannot fetch localhost URLs (sandboxed harnesses).
revisionYes

TDQS

A4.9/5.0
Behavior5/5

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

With no annotations, the description carries full behavioral burden. It discloses side effects (writes into workspace under a deterministic revision-pinned path), return shape (JSON with uri, httpUrl, bytes, format, revision, plus path), and format-specific quirks (SVG outlines text, imgly is self-contained, pdfx adds seconds, html injects GSAP). It also notes httpUrl is process-bound and warns about sandboxed harnesses. 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.

Conciseness4/5

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

The description is long but well-structured: it front-loads the purpose and format list, then dedicates focused paragraphs to outPath, svg, imgly, pdfx, and html. Every section earns its place given the tool's complexity; no filler. It could be slightly tighter but is appropriately detailed for the scope.

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

Completeness5/5

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

Given 6 parameters, nested objects, and no output schema, the description fully covers invocation and behavior: return JSON, workspace path, format nuances, blockId rules, outPath usage, and sandbox limitations. An agent has everything needed to call the tool correctly and handle results.

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

Parameters5/5

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

Schema coverage is 83%, yet the description adds substantial meaning beyond the schema: it explains the format enum's practical implications (e.g., pdfx print-ready, imgly editable), clarifies blockId omission behavior (whole document), details outPath use cases, and expands on html and pdfx nested options with trade-offs. This goes far beyond the schema's terse descriptions.

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

Purpose5/5

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

The description opens with a specific verb and resource ('Export a revision to a final deliverable') and enumerates all supported formats with one-line outcomes (pdf, png/jpeg/webp, svg, pdfx, html, imgly). It distinguishes itself from siblings by framing imgly as the inverse of import and noting that edit auto-persists, so an agent can clearly tell export apart from preview, view, and edit.

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

Usage Guidelines5/5

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

The description gives explicit when-to-use guidance: when to pass outPath (when file needed on disk, when sandboxed cannot fetch localhost), when to use imgly (to take an editable copy out), when to use pdfx (print shop), and when html is required (single page, blockId mandatory). It also tells the agent when not to use it ('you never need this to keep your work') and contrasts with edit.

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

historyA

Walk back from revision to the root, returning the chain (root first). Each entry has { revision, parent, note?, origin?, createdAt }origin: "editor" marks a revision the user saved from the browser editor. Use this to re-ground after a rewind: read the notes, pick the revision you want to continue from, pass it as parent to your next edit. Continue a prior design only when the user asked for it — never because it is the newest entry.

ParametersJSON Schema
NameRequiredDescriptionDefault
revisionYes

TDQS

A4.4/5.0
Behavior5/5

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 reveals the return chain ordering (root first), each entry's shape, the special meaning of `origin: "editor"`, and the non-obvious instruction not to prefer the newest revision. This is rich behavioral context well beyond a simple one-liner.

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

Conciseness5/5

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

Three sentences, each earning its place: the first defines the operation and output ordering, the second documents the entry fields and important origin marker, and the third gives usage guidance and a critical behavioral guardrail. The most important information is front-loaded.

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

Completeness4/5

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

Since there is no output schema, the description supplies the return shape, field semantics, and the intended post-rewind workflow. It does not explicitly state that the operation is read-only or what identifies the root (e.g., null parent), but for a history-walk tool these are minor omissions and the agent has enough to invoke it correctly.

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

Parameters3/5

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

The schema only defines `revision` as a required string with 0% coverage, so the description must compensate. It does explain that `revision` is the starting point for the walk and references it indirectly via `parent`, but it never clarifies the expected format, source, or valid values for the revision identifier. It adds some meaning but leaves a meaningful gap.

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

Purpose5/5

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

The description states a specific verb ('walk back'), a resource ('revision chain'), and a clear output scope ('root first'). It also distinguishes the tool's role from related siblings like edit and changes by framing it as a re-grounding step rather than a mutation or listing operation.

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

Usage Guidelines4/5

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

The description gives an explicit when-to-use: 'Use this to re-ground after a rewind' and a clear behavioral rule: 'Continue a prior design only when the user asked for it — never because it is the newest entry.' However, it does not name alternative sibling tools or explicitly state when not to use history in favor of another tool like changes.

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

importA

Import a design FILE as a NEW design root revision — a native CE.SDK .imgly design file (also the legacy .scene and .zip forms); a foreign design file: Photoshop (.psd/.psb), InDesign (.idml), PowerPoint (.pptx), or PDF; or a plain image (PNG/JPEG/WebP/GIF) or SVG, which becomes a one-page design sized to the image (format: "image"/"svg"). The inverse of export({ format: 'imgly' }). To make a media file (image/font/video/audio) available for use INSIDE a design instead of becoming one, use asset_add.

Source: { url } (http/https), { demo } (a design bundled with this server — ids: "cybernews") or { path } (absolute local file path; Local only). Archives are ingested: bundled asset bytes are extracted into the workspace as content-addressed assets/<sha>.<ext> files, so the loaded design is durable and behaves exactly like a natively-built one.

Returns JSON { revision, title, format } — continue with edit({ parent: revision, … }). Foreign-format imports may add warnings (importer notes about what did not survive — substituted fonts, unsupported features): treat them as your touch-up list — preview the pages, then repair with edit; find replacement fonts via asset_search. Bare scene-file loads (no bundled assets) additionally return assets: a classification of every referenced asset URI by scheme (workspace / external / bundle / transient / other). External URLs are NOT fetched; transient entries WILL be lost on the next save — replace or relocate them before committing further work.

Engine caveat: InDesign and PDF import need the WASM engine (IMGLY_CESDK_ENGINE=wasm) — on the native engine import errors cleanly for those two formats; Photoshop and PowerPoint import work on both.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleNoDisplay name for the new design. Defaults to the source file's basename.
sourceYesThe design to load. Provide exactly one of `url` (http/https), `demo` (a bundled demo design), `path` (absolute local file path; Local only).

TDQS

A4.6/5.0
Behavior5/5

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 thoroughly discloses side effects: creates a new root revision, extracts archive assets into `assets/<sha>.<ext>`, does NOT fetch external URLs, may return warnings, and notes that transient assets are lost on next save. The engine caveat is also clearly stated.

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

Conciseness4/5

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

The description is lengthy but well-structured and front-loaded: purpose/alternatives first, then sources, return value, warnings, and engine caveats. Every sentence carries meaningful content, though a slightly tighter presentation would improve scannability.

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

Completeness5/5

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

Given the tool's complexity, the absence of an output schema, and no annotations, the description is remarkably complete. It covers return shape (`{ revision, title, format }`), warnings, asset classifications, follow-up actions, and engine-specific restrictions — everything an agent needs to call it correctly.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description adds useful behavioral context around sources (e.g., external URLs not fetched, demo id, local path) but does not substantively enrich the meaning of the two parameters beyond what the schema already documents.

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

Purpose5/5

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

The description opens with a precise statement: 'Import a design FILE as a NEW design root revision', lists all supported formats, and explicitly distinguishes itself from `export` (inverse) and `asset_add` (for media inside a design). An agent can immediately tell what this tool does and how it differs from its siblings.

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

Usage Guidelines5/5

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

It gives explicit routing guidance: use `asset_add` for media files meant to be used inside a design, and import is the inverse of `export({ format: 'imgly' })`. It also provides follow-up instructions for foreign-format warnings (preview, repair with edit, find fonts via asset_search) and an engine-specific caveat for InDesign/PDF import.

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

inspectA

Read one revision in full: parent, note, createdAt, title (root only), and the JS code that produced it (when written via edit).

Use this after history when you've picked a revision and want to know HOW it got there — the code is the precise operation; note is the agent's summary.

Returns JSON { revision, parent, note?, origin?, createdAt, title?, code? }origin: "editor" marks a revision the user saved from the browser editor. code is omitted for revisions not produced by edit (e.g. future import paths).

⚠ Past code reveals the PATTERN of an edit (which APIs were called, what kind of block was targeted), NOT the block ids. Block ids are session-scoped — re-discover them in the current engine; don't replay the literal numeric ids.

ParametersJSON Schema
NameRequiredDescriptionDefault
revisionYesRevision id to inspect.

TDQS

A4.3/5.0
Behavior4/5

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 that `code` is omitted for revisions not produced by `edit`, warns that past code contains patterns not block ids (which are session-scoped), and explains the `origin` field. This is substantial behavioral context that helps the agent avoid misuse. It doesn't explicitly state it's read-only, but the nature of 'read' implies no side effects.

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

Conciseness4/5

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

The description is well-structured and front-loaded with the core purpose. It is concise for the amount of information conveyed: purpose, usage, return format, and an important warning about block ids. Each sentence adds value, and the warning is crucial. It is slightly long but not wasteful.

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

Completeness4/5

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

Given the tool's simplicity (one parameter, no output schema, no annotations), the description covers all essential aspects: what it does, how to use it, what it returns, and important limitations. It is complete enough for an agent to call it correctly without further assumptions. It could mention error handling or edge cases, but these are not critical for correct invocation.

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

Parameters3/5

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

The schema already describes the single parameter ('Revision id to inspect.') with 100% coverage. The description adds context by linking it to 'history' (implying the id comes from there) and by explaining what the revision represents. This is enough to meet the baseline for high schema coverage, though it could have elaborated on id format or how to obtain it.

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

Purpose5/5

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

The description clearly states the action ('Read one revision in full') and the resource (a revision), and enumerates exactly what is returned. It also differentiates itself from the sibling 'history' tool by specifying that it is used after picking a revision from history, making its purpose distinct and unambiguous.

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

Usage Guidelines5/5

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

The description explicitly tells the agent when to use this tool: 'Use this after `history` when you've picked a revision'. It also explains the distinction between the code (precise operation) and note (agent's summary), providing clear context for selection among siblings. It does not explicitly state when not to use it, but the guidance is strong enough.

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

listA

List designs in the workspace. Returns an array of { rootRevision, title, latestLeaf, updatedAt, headOrigin?, headNote? } sorted newest-first; the head* fields describe latestLeaf. headOrigin: "editor" means the last hand on that design was the user's, in the browser editor — read headNote (the engine-computed diff of their save) before you change anything, and build from latestLeaf so their work is not discarded. Use when the user asks what designs exist or wants to resume earlier work. Seeing a design here is never by itself a reason to continue it — for a new design request pass parent: null to edit.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.9/5.0
Behavior5/5

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

With no annotations, the description carries the full behavioral burden, and it succeeds: it reveals the return type, sort order, optional `head*` fields, and their meaning. It adds actionable warnings about reading `headNote` and building from `latestLeaf` before making changes.

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

Conciseness5/5

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

The description is compact but information-dense, front-loading the core list function before diving into field semantics and usage caveats. Every sentence adds value: return shape, sort order, head-field interpretation, and routing guidance.

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

Completeness5/5

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

Despite the lack of an output schema, the description documents the return object fields and their significance. It also covers when to use the tool and warns about destructive follow-up behavior, leaving no critical gap for an agent to call or act on this tool safely.

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

Parameters4/5

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

The tool has zero parameters, so there is no schema detail to explain; the baseline for 0-parameter tools is 4. The description instead enriches the call semantics by explaining what the returned fields mean.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'List designs in the workspace,' immediately establishing the tool's core function. It also defines the returned shape and ordering, and distinguishes the purpose from sibling mutation tools like `edit`.

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

Usage Guidelines5/5

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

It explicitly states when to use the tool ('when the user asks what designs exist or wants to resume earlier work'). It also gives targeted guidance about what not to do—seeing a design is not a reason to continue it—and directs new-design requests to `edit` with `parent: null`.

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

loginA

Sign in with your IMG.LY account (opens the system browser). The session saves automatically once the user finishes in the browser; call login again anytime to confirm — safe to repeat, it does not restart the flow or invalidate the open link. Pass switch_account=true to sign in as a different user.

ParametersJSON Schema
NameRequiredDescriptionDefault
switch_accountNoForce a fresh sign-in screen even if a session exists.

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description carries the behavioral transparency burden and does well: it discloses browser opening, automatic session saving, repeat safety, and that calling again does not restart the flow or invalidate the open link. It does not mention failure behavior or output, but the key side effects are covered.

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

Conciseness5/5

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

Two sentences with no filler. The main purpose is front-loaded, followed by repeated-use behavior, then the optional parameter. Every sentence contributes useful information.

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

Completeness4/5

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

For a simple tool with one optional parameter and no output schema, the description is nearly complete. It covers the flow, repeat safety, and the parameter meaning. It does not explicitly state what the tool returns, but the 'call again anytime to confirm' hint provides enough practical context for an agent.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema fully documents switch_account. The description adds 'sign in as a different user', which slightly clarifies intent, but does not add substantial meaning beyond the schema's 'Force a fresh sign-in screen even if a session exists.' Baseline 3 is appropriate.

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

Purpose5/5

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

The description states a specific action ('Sign in with your IMG.LY account') and distinguishes this tool from siblings by noting it opens the system browser. It clearly identifies the resource and the auth flow.

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

Usage Guidelines4/5

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

It gives clear context for when to call: anytime to confirm a session, and with switch_account=true to sign in as a different user. It does not explicitly mention alternatives like logout or when not to use it, but the usage context is unambiguous.

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

logoutA

Sign out of your IMG.LY account (revokes the session and clears local credentials).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations, the description carries the full burden. It discloses the side effects: revoking the session and clearing local credentials. This is meaningful behavioral context beyond the tool's name, though it doesn't cover potential edge cases like error states.

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

Conciseness5/5

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

A single sentence that is immediately understandable, front-loaded with the core action and followed by the behavioral details. No wasted words.

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

Completeness5/5

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

For a zero-parameter, no-output tool, the description fully covers what an agent needs to know to invoke it correctly. There is no missing information.

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

Parameters4/5

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

The tool has zero parameters, and the schema is empty. Per the rubric, the baseline is 4. The description doesn't need to add parameter semantics since there are none to describe.

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

Purpose5/5

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

The description clearly states the verb 'Sign out' and the resource 'your IMG.LY account', and explicitly mentions the consequences (revokes session, clears credentials). It naturally differentiates from the sibling 'login' without needing to name it.

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

Usage Guidelines4/5

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

The description makes the purpose obvious — it is the action to end a session. It doesn't explicitly state when not to use it, but for a simple logout tool this is sufficiently clear and no alternatives need to be excluded.

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

previewA

Render blocks (almost always pages) to inline images so you can see the result.

revision is REQUIRED — pass the revision the blocks belong to, the id edit returned. blockIds is a LIST, rendered in the order you give it: [pageId] for one page, [a, b] for a subset, or OMIT it entirely to preview every page of the design in document order.

The given revision is loaded before rendering, so the ids always resolve against the right scene — never against a different design another agent may have loaded on a shared server.

Preview several blocks at once when REVIEWING or capturing a finished design — a whole deck in one call, or just the pages a fix touched. While BUILDING a multi-page design, keep previewing each page right after you build it: batching there does not avoid the bugs, it only delays finding them.

Output is always PNG (lossless — thin lines render exactly). EACH block gets the full 0.25 megapixel budget, adjusted to its own aspect ratio — a square page renders 512×512, a 1:4 page 256×1024. There are no size or format knobs, and at most 10 blocks render per call.

To eyeball fine detail, preview the suspect BLOCK directly — the pixel budget concentrates on it (an effective zoom). For native-resolution certainty, export the page and open its httpUrl.

ParametersJSON Schema
NameRequiredDescriptionDefault
blockIdsNoBlocks to render, in the order you want them back — almost always page ids, not the scene root. Omit to preview every page of the design in document order. At most 10 render per call.
revisionYesRevision id the blocks belong to (from `edit`). Loaded before rendering so the ids resolve against the right scene.

TDQS

A4.9/5.0
Behavior5/5

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

With no annotations, the description fully discloses behavior: output is PNG (lossless), each block gets a 0.25 megapixel budget adjusted to aspect ratio (with examples), at most 10 blocks per call, no size/format knobs, and the revision is loaded before rendering to ensure correct scene resolution on shared servers. This is rich, specific behavioral detail that goes far beyond a simple 'renders pages' statement.

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

Conciseness4/5

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

The description is lengthy but every paragraph serves a purpose: purpose, parameter semantics, usage guidance, pixel budget, and alternative routing. It front-loads the core purpose in the first sentence and uses code formatting for parameter names. It's not bloated; it's thorough, though slightly verbose for a tool with only two parameters.

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

Completeness5/5

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

Given no output schema and no annotations, the description covers everything an agent needs: how to use each parameter, the rendering behavior (PNG, resolution per block), limits (max 10), and when to choose alternatives like `export`. It even addresses edge cases like shared-server state and pixel budget for fine detail. There are no obvious gaps that would prevent correct invocation.

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

Parameters5/5

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

The schema already describes both parameters at 100% coverage, but the description adds significant semantics: `blockIds` is a list whose order matters, can be omitted to preview all pages, and has a 10-block cap; `revision` is required and loaded before rendering to resolve ids against the right scene. This adds operational meaning beyond the schema's static field descriptions.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Render blocks (almost always pages) to inline images so you can see the result.' It clearly distinguishes itself from the sibling `export` by contrasting inline images with native-resolution output and an `httpUrl`. This is not a tautology; it tells the agent exactly what the tool does and how it differs from similar tools.

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

Usage Guidelines5/5

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

The description gives explicit when-to-use and when-not-to-use guidance: 'Preview several blocks at once when REVIEWING or capturing a finished design... While BUILDING a multi-page design, keep previewing each page right after you build it.' It also directs the agent to alternatives: 'For native-resolution certainty, `export` the page and open its `httpUrl`' and 'To eyeball fine detail, preview the suspect BLOCK directly.' This is comprehensive routing advice.

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

renameA

Rename a design. revision may be any revision in the lineage; the root's title is updated. Use this when the title set at design creation no longer fits.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYes
revisionYes

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the burden of disclosing behavior. It adds the non-obvious side effect that 'the root's title is updated' regardless of which revision is passed, which is valuable behavioral context. It does not cover reversibility or permissions, but the key side effect is disclosed.

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

Conciseness5/5

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

The description is two sentences with no fluff. The action is front-loaded in the first sentence, and the second adds behavioral detail and usage guidance. Every sentence contributes value.

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

Completeness4/5

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

For a simple two-parameter rename tool with no output schema or annotations, the description covers the operation, parameter semantics, and usage context. It does not mention return values or error conditions, but these are less critical given the low complexity and straightforward action.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must compensate. It explains that 'revision may be any revision in the lineage' and that the root's title changes, giving meaning to both parameters. The title parameter's role is implied as the new name, though not explicitly stated, so a slight deduction applies.

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

Purpose5/5

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

The description opens with 'Rename a design,' which is a specific verb and resource. It further distinguishes the action by noting that any revision in the lineage can be used and that the root's title is updated, clarifying exactly what the tool does.

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

Usage Guidelines4/5

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

The description explicitly states 'Use this when the title set at design creation no longer fits,' giving a clear context for use. However, it does not mention alternatives or exclusions, such as using the 'edit' tool for other properties, so it lacks full sibling differentiation.

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

scorecardA

Record the verdict of a judge loop you have COMPLETED for a revision — the final step of the judge skill. Recording is a claim about work already done: never call this without having scored the axes against actual preview renders of this exact revision's content.

verdict: 'pass' — every applicable axis scored ≥ 8; the design may be delivered. verdict: 'fail' — you are stopping with an axis below 8 (e.g. the user cut remediation short); the failure stays on record.

The latest scorecard is what export checks: delivering a revision it does not cover (content changed since, or no scorecard at all) adds a reminder to its result. Judging again after further edits? Record a new scorecard for the re-judged revision.

ParametersJSON Schema
NameRequiredDescriptionDefault
verdictYes'pass' when every applicable axis scored ≥ 8, 'fail' when stopping below the gate.
revisionYesThe revision the judge loop scored — the id whose renders you previewed.

TDQS

A5/5.0
Behavior5/5

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

With no annotations, the description carries full behavioral burden and does it well. It discloses that recording is a 'claim about work already done', not the action itself, and explains the side effect on `export` (adds a reminder if revision is not covered). It also clarifies the semantic of pass/fail outcomes. This goes beyond what an annotation 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.

Conciseness5/5

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

Despite being ~140 words, every sentence contributes. The purpose is stated first, followed by verdict semantics, then the export interaction, and a closing note on re-judging. It is structured with paragraphs and clear separation of ideas, front-loads the critical 'never call without' warning, and avoids redundancy. Appropriate length for the behavioral nuance it conveys.

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

Completeness5/5

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

For a 2-parameter tool with no output schema, the description covers all necessary context: the action's role in the judge workflow, prerequisites (actual previews), the meaning of each verdict, the interaction with `export`, and the policy for re-judging. An agent has everything it needs to decide to call and to use parameters correctly.

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

Parameters5/5

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

Schema description coverage is 100%, so the baseline is 3, but the description adds significant semantic depth. It elaborates the meaning of 'pass' and 'fail' with specific threshold criteria (each axis ≥ 8) and clarifies that `revision` must be the id whose renders were previewed. This explains the purpose of both parameters beyond their schema types.

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

Purpose5/5

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

The description opens with a precise verb-resource pairing: 'Record the verdict of a judge loop you have COMPLETED for a revision.' It explicitly names the tool's role as the final step of the `judge` skill and distinguishes it from siblings by referencing its relationship to `export`. No ambiguity about what the tool does.

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

Usage Guidelines5/5

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

Provides explicit conditions for use: 'never call this without having scored the axes against actual `preview` renders.' It also instructs when to record a new scorecard ('Judging again after further edits? Record a new scorecard'), and explains the consequence of not covering a revision in `export`. Clear when-to-use and when-to-refrain guidance.

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

skillA

Load a skill — an instruction document that teaches you how to work with this server. Read the relevant skill BEFORE attempting work it covers. Intended sequence: (1) call with just name to get the entry document — it ends with an index of the bundled files; (2) pass query (a regex, like Grep) to search the bundled files for the rules you need, scoping with path when you know the file; (3) full-read a file via path only when it is small (the index shows line counts) or after a search missed twice — slice large files with offset (skip count: offset=10 starts at line 11) and limit. Entry documents are always returned whole (offset/limit are ignored for them).

Triggered for any task using this server's edit or preview tools. Authoritative TypeScript signatures for the CE.SDK CreativeEngine. Use this skill whenever you need the exact signature, parameter types, or return type of an engine.* method — especially before calling a method you haven't used yet. This is THE source of truth for signatures: generated from the .d.ts shipped with the same @cesdk/node package the engine runs, while prose docs (the guide skill) can drift.

Reading this skill with no path returns the WHOLE edit-code API surface inline — the engine.design facade, the props trees, the attachment unions and the capability matrix. That is one call and it is all edit code needs.

The sub-file "signatures.d.ts" is the same surface plus the upstream CE.SDK core — JSDoc-free signatures with every string-vocabulary type (property names, block types, enum values) flattened to its literal union on the declaring line. It is served a page at a time: search it with query (e.g. query: "saveToArchive"), then slice around the hit with path + offset/limit.

Triggered when you need to verify an engine.block.* or engine.scene.* signature, look up a parameter type, or confirm an enum/string-property name. Use when applying a brand kit / brand style to an existing CoDesign / CE.SDK design — a rules-governed restyle (recolor + refont + logo + treatment by role), not a free-form style change; when a restyled design reads off-brand (free-chosen colors, wrong accent, a second colour used as structure, a coloured button the brand forbids, a headline set in a weight the brand bans, a flat bordered card, or the wrong / recoloured / redrawn logo); when loading a brand's fonts, wordmark SVG, or signature device into a scene; or when turning an external brand (a guidelines PDF, a website / URL, a Figma file, or a raw asset dump) into a reusable brand kit. Use when the user asks to create / generate / make a NEW design from a prompt — a deck or slides, poster, flyer, social post, business card, or a custom-size canvas. Runs the guided intake: derive every brief parameter the prompt already answers (class, format, audience, vibe, brand, content), ask ONLY the missing questions — one round, chip-style options, "Decide automatically" defaults — then echo the design brief and hand off to the handbook Loop. A brief given to the /codesign prompt lands here as the stated input. Canvas-format reference for CoDesign designs — one file per screen/print format (ig-post, ig-square, ig-story, widescreen, linkedin-post, x-post, deck, poster, flyer, business-card): exact W×H, aspect, medium, platform safe zones, print bleed/dpi. Use when picking or setting up a canvas size, checking a platform safe zone, or preparing print dimensions. Re-composing an existing design into a format is the resize skill; new-design intake is the create skill. Look up CE.SDK Node.js reference docs, guides, and configuration pages — prose explanations, recipes, and concept docs for everything the engine can do (text, fills, colors, export, video, templates, asset sources, …).

Use when you need to understand HOW a CE.SDK feature works or want a code recipe; also triggered by "IMG.LY", "CreativeEditor", "CE.SDK", or "cesdk" when the user needs an existing Node.js doc page. For exact TypeScript signatures use the api skill instead.

The entry document is an index; every doc page is a sub-file — read one with path (e.g. path: "text/add.md"), or search them all with query. Use to quality-gate a design before reporting it done — the mandatory step 5 of the handbook Loop; when the user asks for a design review, score, audit, or QA; or when a design needs remediation after a failed review. The axes, the gate, the scorecard format, and the remediation loop are defined in this skill's body — read it before scoring; do not judge from memory of this description. Use when creating or fixing translated / localized variants of an existing CoDesign / CE.SDK design (e.g. de/ja/ru/ar editions); when a localized edition's text blocks or decorative elements have drifted, re-centered, or resized away from the source layout; when translated copy is tofu, overflowing, mis-tracked, or the wrong font after a language swap; or when loading a non-Latin script (Cyrillic / CJK / Arabic RTL / Vietnamese) font into a scene. Use when the user is new here or asks what this server is / what it can do ("what is CoDesign", "what can you make", "show me"). A guided, plain-language introduction for a HUMAN: explain what CoDesign is in everyday terms, put the six jobs it does on the table, let the user pick one, then run it either on the bundled demo design or on the user's own idea — closing with the optional (never required) IMG.LY sign-in and the ways to earn more credits. Not a design manual: the handbook remains the required read before any edit. Use when resizing or reformatting a CoDesign / CE.SDK design to a new size or aspect ratio (ig-post ↔ ig-square ↔ ig-story ↔ widescreen, or a custom W×H); when building the size/format editions of a design from an existing design or from a brief; or when a reformatted edition has a dead void / letterboxed empty band, drifted or broken margins, off-canvas or clipped elements, mis-scaled decoration, or a stretched / squished layout.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesSkill to load.
pathNoOptional sub-file within the skill. Defaults to the entry document.
limitNoMaximum number of lines to return.
queryNoSearch the skill instead of reading it: a regular expression matched per line (like Grep). Smart-case: all-lowercase pattern → case-insensitive; any uppercase → case-sensitive. An invalid pattern is an error. Output is grep format — `file:N:` match lines, `file-N-` context lines, blocks headed by `--` with the enclosing markdown headings. Combine with `path` to search one file. Mutually exclusive with offset/limit.
offsetNoLines to skip before reading (offset=10 starts at line 11). Use with `limit` to slice large files.
contextNoContext lines around each match, like grep -C (default 2; 0 = bare match lines). Only valid with `query`.
maxResultsNoMaximum search matches to return (default 50, max 200).

TDQS

A4.8/5.0
Behavior5/5

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

With no annotations, the description carries the full burden, and it discloses non-obvious behavior: entry documents are always returned whole and ignore offset/limit, query acts like Grep, large files should be sliced, and a search should be attempted twice before a full read. It also states the smart-case and invalid-pattern consequences in the schema-backed text, with no contradiction.

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

Conciseness4/5

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

The operational guidance is front-loaded and each section has a role, but the available_skills block is lengthy. It is justified because the enum values and triggers must be documented somewhere, and the prose is tightly written given it covers ten skills.

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

Completeness5/5

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

For a 7-parameter tool with no output schema and no annotations, the description covers the workflow, how to choose each skill, the search-vs-read strategy, and the entry-document/index hints. An agent can invoke this tool correctly without needing external knowledge.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3; the description earns one more point by explaining how the parameters chain together (name → query → path → offset/limit) and by adding behavior the schema does not state, such as entry documents ignoring offset/limit. It does not duplicate every field, relying on the rich schema for details like maxResults/context.

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

Purpose5/5

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

The description opens with a specific verb and object: 'Load a skill — an instruction document...' and goes on to list ten named skills with one-line definitions, making it unmistakable what is loaded. It also separates the skill mechanism from the skills themselves, so an agent can tell 'skill' from content-bearing tools like list or view.

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

Usage Guidelines5/5

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

It gives an explicit before/after rule ('Read the relevant skill BEFORE attempting work it covers'), a numbered intended sequence, and per-skill trigger conditions ('Use when...', 'Triggered for any task using...'). It even routes between alternatives within the tool ('For exact TypeScript signatures use the `api` skill instead').

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

viewA

Get a URL the human can open to view and edit the design in CE.SDK. Returns the design's stable URL — the viewer keeps it live, re-rendering as you edit, so print it ONCE and don't re-emit a fresh URL every turn. Add pin: true for a frozen permalink to that exact revision (for 'look at exactly this' or comparing revisions). The page is a full editor; when the human clicks 'Save', their edits land as a new revision whose note carries an engine-computed change summary — continue from that revision.

ParametersJSON Schema
NameRequiredDescriptionDefault
pinNoWhen true, return a frozen permalink to this exact revision instead of the live design URL.
revisionYesAny revision in the design; resolved to its root and opened at the design head.

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden—and it delivers: it discloses that the URL stays live and re-renders on `edit`, that pinning freezes a revision, and that human saves create new revisions with engine-computed change summaries. It also warns against re-emitting a fresh URL every turn, which is exactly the kind of non-obvious behavior an agent needs.

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

Conciseness5/5

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

The description is dense but every sentence earns its place: core behavior, the critical 'emit once' instruction, the pin variant, and the downstream save/revision loop. The most important operational guidance is front-loaded, and there is no filler.

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

Completeness5/5

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

There is no output schema, so the description must explain what is returned—and it does (a stable URL, or a frozen permalink when pinned). It also covers the lifecycle after the human saves, which is essential for the agent to continue from the right revision. Given the tool's moderate complexity, nothing critical is missing.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning beyond the schema: it translates `pin: true` into a 'frozen permalink' and ties it to concrete use cases like 'look at exactly this' or comparing revisions. It also clarifies that any revision resolves to its root and opens at the design head.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Get a URL the human can open to view and edit the design in CE.SDK.' It clearly distinguishes the tool's core output (a stable, live design URL) from the surrounding editing/management tools and explains the two modes (live vs pinned).

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

Usage Guidelines4/5

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

The description gives clear usage context: emit the live URL once, avoid re-emitting every turn, and use `pin: true` for exact revisions or comparisons. It doesn't explicitly name sibling alternatives or state when not to use this tool, but it provides strong operational guidance for the main decision point.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 19 tool updatesv0.1.0
    • First observedasset_add
    • First observedasset_generate
    • First observedasset_search
    • First observedchanges
    • First observedchecklist
    • First observeddiagnostics
    • First observededit
    • First observedexport
    • First observedhistory
    • First observedimport
    • First observedinspect
    • First observedlist
    • First observedlogin
    • First observedlogout
    • First observedpreview
    • First observedrename
    • First observedscorecard
    • First observedskill
    • First observedview

TDQS

A4.2/5.0

Scored across 19 tools

Disambiguation5/5

Each tool targets a distinct concern: revision lifecycle, asset management, auth, skills, export, or diagnostics. The asset_search/asset_add/asset_generate trio is clearly separated by operation (find/add/generate), and list/history/changes/inspect are differentiated by scope. No two tools appear to overlap in a way that would cause misselection.

Naming Consistency3/5

Bare verbs (edit, export, preview, import, list, view) coexist with prefixed names (asset_search, asset_add, asset_generate) and noun-only names (skill, history, checklist, scorecard, diagnostics). While the core verbs are recognizable and readable, there is no single predictable pattern across the set.

Tool Count3/5

At 19 tools, the server sits in the 16-25 range that feels heavy. However, the broad scope (design editing, assets, auth, skills, diagnostics, quality gates) justifies most of them, so it is borderline rather than bloated.

Completeness4/5

The design lifecycle is well covered: create (edit, import), read (inspect, preview, history, list), update (edit, rename), and export, plus asset management and quality gates. The main gap is the absence of delete/remove operations for designs or assets, and asset management lacks update/delete, but agents can work around these.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables Cursor to access Figma design data via MCP, allowing it to fetch simplified layout and styling information to accurately implement designs from Figma files.
    1,330 npm
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    Local MCP server enabling Codex to inspect and edit HWPX documents, Excel spreadsheets, and QGIS QGS/QGZ projects on Windows with safety and fidelity.
    1
    -
  • A
    license
    A
    quality
    A
    maintenance
    Local-first visual design workspace for AI assistants. Compose wireframes and branded multi-page HTML/CSS documents with live preview, annotations, brand and asset libraries, typed data collections, layout validation, PDF export, and draft-only Gmail handoff.
    14
    127 npm
    19
    MIT