awsm
Use AWSM as a local MCP design/UI toolkit: manage assets and typography, inspect projects, prepare FigCraft handoffs, run browser visual QA, and bridge trusted downstream MCP tools.
Search, retrieve, save, or draw SVG icons; discover and download images/assets; generate simple SVG assets.
Generate color palettes, check WCAG contrast, inspect/install Google Fonts, and extract observed FigCraft design tokens.
Inspect existing UI projects and create fast brief-to-first-render UI plans.
Serve local static previews for HTML/CSS/JS/SVG.
Prepare FigCraft layer handoffs and sync native FigCraft exports into web asset folders.
Capture, audit, and compare localhost UI screenshots with Playwright across viewports, detecting layout/accessibility/console issues and pixel differences.
Discover, connect to, and call explicitly configured downstream stdio MCP tools such as FigCraft, CADCraft, or SolidCraft via
bridge_listandbridge_call.
Provides icon search and retrieval from Lucide, including prefix-filtered searches and fetching specific icons at a requested size.
Provides photo search through Openverse, filtering results for commercial use and returning candidates whose source, license, creator, and attribution must be verified.
Enables photo search through Pexels when PEXELS_API_KEY is configured in the MCP process environment.
Enables photo search through Unsplash when UNSPLASH_ACCESS_KEY is configured in the MCP process environment.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@awsmfind licensed photos of coffee and build a color palette from #176F57"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
AWSM
One MCP connection. Use only the design tools your task needs.
AWSM is a local Model Context Protocol (MCP) server for coding agents. It combines UI design utilities, visual assets, browser QA, and an optional gateway to native design/CAD applications. SolidCraft is for standalone 3D modeling, CADCraft is for 2D drafting, and they can work together when an architectural plan needs to become a 3D building. FigCraft supports editable canvas design when its own MCP is connected. Website implementation and 3D publishing are separate workflows, not automatic next steps.
No hosted service or VPS is required. AWSM runs on your computer over stdio.
Get started · Connect other MCPs · Explore tools · Updates · GitHub issues
How it works
Your coding agent connects to one AWSM MCP server over local stdio. The agent uses AWSM's built-in UI tools or selects a downstream application through bridge_list and bridge_call:
Built-in AWSM tools: project/UI inspection, design assets, typography, tokens, design-to-code handoff and browser visual QA.
SolidCraft: native, editable parametric 3D models and renders, independently of CADCraft.
CADCraft: 2D CAD drafting, measured architectural plans and drawing inspection, independently of SolidCraft.
FigCraft: native canvas editing through its separately configured FigCraft MCP, plus optional design-to-code handoff.
3D publishing: optional
publish_3d_assetwhen the user actually wants website assets or a FigCraft preview image.
Installed CADCraft and SolidCraft CLIs can be discovered without launching either application; other downstream MCPs require an explicit bridge configuration. AWSM does not bundle these applications or become a CAD/BIM engine. The agent chooses the workflow; AWSM does not run a hidden automatic intent classifier.
Related MCP server: s-gw MCP server
Workflows follow your intent
A user may want only 3D, only a floor plan, only a FigCraft design, or a combination. AWSM does not enforce CADCraft → SolidCraft → FigCraft → website.
Request | Tools used | What you get |
Create or revise a 3D product, object, or building | SolidCraft only | Native editable 3D model; preview or render when requested |
Draw or edit a technical drawing / floor plan | CADCraft only | 2D CAD drawing with dimensions and layers |
Turn a measured architectural plan into 3D | CADCraft + SolidCraft | Reconstructed parametric building model, validated against the plan |
Design or revise a landing page inside FigCraft | FigCraft MCP only | Editable FigCraft frames, text and layout; no website code unless requested |
Implement a UI in an existing codebase | AWSM built-in UI tools + coding agent | Working application UI with visual QA where applicable |
Publish a 3D model to a website | SolidCraft + | OBJ and PNG in the requested website project |
Put a 3D preview into FigCraft | SolidCraft + configured FigCraft MCP | A 2D PNG image layer, not editable 3D geometry |
3D-only is a complete deliverable. For a request such as “Create a 3D desk speaker with a machined-aluminum body,” the agent uses SolidCraft to model, check dimensions, inspect the result, and save an editable .sc file if an authorized destination is provided. It does not open CADCraft, generate a website, export an OBJ web package, or modify FigCraft unless asked.
2D → 3D architecture is a separate task. The agent reads the actual CADCraft plan (entities, layers, geometry, annotations and dimensions), interprets architectural elements, then builds and checks the corresponding SolidCraft features. This is a guided, reviewable reconstruction—not automatic DXF/DWG-to-BIM conversion or guaranteed bidirectional synchronization.
Publishing and handoff are opt-in. A rendered product image is not automatically a web deployment, and a model preview placed in FigCraft is still just a 2D image layer. Use further tools only when the requested output needs them.
Quick start
Requirements: Node.js 18+, npx, and an MCP-compatible coding agent.
Run this inside the project where you use your agent:
npx -y github:rikoarik/artcraft-mcp-awsm setup \
--client opencode \
--source github:rikoarik/artcraft-mcp-awsmRestart the coding agent or reconnect its MCP servers. You should see awsm as one MCP connection, with the awsm-design skill installed.
For OpenCode V2, verify the local connection with opencode mcp list or the /mcps view. AWSM's installer writes the entry under mcp.servers.awsm in .opencode/opencode.json.
AWSM currently installs from GitHub; it is not published to npm under
my-awsm-mcp. The setup command downloads/builds and executes the GitHub source. Review code before running third-party packages.
Choose your agent
Replace opencode with the client you actually use:
Client |
| MCP configuration created |
OpenCode |
|
|
Claude Code |
|
|
Codex |
|
|
Google Antigravity |
|
|
GitHub Copilot CLI |
|
|
Zed |
| User-level Zed settings with |
Use --client all only if you really need multiple clients. For Zed, --global configures the MCP entry; project-level setup can still install the skill separately. Restart the relevant client after setup.
Try your first task
Give the agent the actual task rather than asking it to test every AWSM tool:
Design and implement a construction-project dashboard in this existing app. Reuse its components and styles, use AWSM for missing icons or assets, and check the mobile and desktop render. Build working UI rather than stopping at a plan.
The default installation provides one skill, awsm-design, for choosing relevant tools and validating results. AWSM's individual tools remain available when the agent needs them.
A 3D-only task can be as simple as:
Create an editable 3D desk speaker in SolidCraft. Follow the requested proportions and materials, validate the geometry and show an isometric preview. No CADCraft, website or FigCraft work.
It requires solidcraft-cli installed or an explicit solidcraft bridge. AWSM does not install SolidCraft for you; bridge_list({server:"solidcraft"}) checks discovery without starting it.
What's included
Capability | What it helps with | Key tools |
Project context | Inspect an existing UI repo and plan a fast first render |
|
Icons and images | Find, download, and prepare visual assets |
|
Design foundations | Work with local fonts, palette, observed tokens, and contrast |
|
FigCraft handoff | Classify inspected layers and copy exported artwork into a web project |
|
Visual QA | Inspect a running UI and compare screenshots at matching viewports |
|
MCP connections | Discover and invoke configured third-party tools |
|
3D asset publishing | Prepare SolidCraft OBJ/PNG for a website; optionally place the PNG into FigCraft |
|
Additional utilities include draw_icon, make_asset, and serve. In total, AWSM currently exposes 24 MCP tools through one server.
FigCraft: editable design or optional design-to-code
To design in FigCraft only: connect the actual FigCraft MCP (configured separately), inspect the current document, and create/edit frames, text, layers and layout using its supported native tools. Revisions can remain in the same document (for example, a new V2 page) without building a website. AWSM's built-in tools do not directly change the FigCraft canvas; a configured native FigCraft MCP is responsible for canvas edits.
Only when the user also requests website implementation:
Inspect the FigCraft document and export the artwork using FigCraft's native MCP.
Use
prepare_web_handofffor layer classification, layout/text information and exportable assets.Use
sync_figcraft_assetsafter the native exports exist.Have the coding agent implement functioning UI in the actual web project.
Use
review_uiagainst a comparable reference, if local Playwright is available.
This is an optional design-to-code workflow, not a one-click pixel-perfect export. A FigCraft design request alone must not trigger web implementation.
Connect other MCPs
The gateway is optional. AWSM's built-in UI/design tools work without any downstream applications. Installed cadcraft-cli and solidcraft-cli are discovered on demand from PATH, but other providers (including FigCraft) require explicit configuration. Discovery does not start a provider.
If you want the coding agent to connect only to AWSM, you can let AWSM start trusted downstream stdio MCP servers, then discover and call their tools through bridge_list and bridge_call.
1. Install the downstream MCP separately
For example, install a FigCraft MCP server using its own instructions. Obtain its real launch command, arguments, and tool names. AWSM does not install third-party MCPs or automatically read your other clients' configurations.
2. Create .awsm/bridges.json
Place the file in the working directory from which AWSM starts:
{
"version": 1,
"servers": {
"figcraft": {
"command": "node",
"args": ["/absolute/path/to/figcraft-mcp-entry.js"],
"allowedTools": ["exact_tool_name_from_figcraft"]
}
}
}This is a configuration template, not a verified FigCraft command. Replace both the file path and tool names with the values supported by your installed provider. Other stdio servers may use different executables and arguments. Installed CADCraft and SolidCraft are detected automatically unless disabled.
If AWSM starts from another directory, set AWSM_BRIDGE_CONFIG to an absolute file path pointing to the JSON configuration. Restart AWSM after changing the file.
3. Discover, then call
Ask the coding agent to:
Use bridge_list with connect=false to see which MCP providers are configured.
Connect only to the "figcraft" server when I request FigCraft edits.
Inspect its actual available tools and their input schemas.
Call only the tools needed for the requested design changes.
Do not connect CADCraft or SolidCraft unless the task needs them.At the MCP level the workflow looks like:
bridge_list({ connect: false }) // Discover without launching providers
bridge_list({ server: "figcraft", connect: true }) // Connect only when needed
bridge_call({
server: "figcraft",
tool: "exact_tool_name_from_figcraft",
arguments: { /* follow the returned input schema */ }
})The bridge returns downstream MCP content, including text or images when supported. It does not automatically expose every downstream tool as a new top-level tool.
Security and limits
The gateway supports local stdio MCP servers. CADCraft and SolidCraft are exceptions to manual configuration because AWSM can discover their installed CLIs. Direct HTTP/SSE proxying is not implemented.
allowedToolsrestricts what AWSM can call. Avoid["*"]unless you trust every action exposed by that server.Child servers execute with your local account's permissions and may inherit your process environment. Review commands, environment variables, and provider trust.
Third-party tools can perform writes or destructive actions. Use the coding agent's normal approval process.
Missing or failed downstream MCPs do not disable AWSM's built-in utilities.
Architecture workflow: CADCraft to SolidCraft
AWSM can use CADCraft for an architectural floor plan (2D) and SolidCraft for the corresponding building model (3D). The agent selects the minimum workflow that matches the request:
Intent | Applications used | Result |
Draw or modify a floor plan | CADCraft | 2D plan only |
Convert a floor plan into a 3D building | CADCraft → SolidCraft | Parametric 3D based on measured plan geometry |
Design a standalone 3D object or building | SolidCraft | 3D only |
Publish a finished 3D model into a website | SolidCraft → | OBJ/PNG for a web project |
Place a model preview in FigCraft | SolidCraft + configured FigCraft bridge | 2D PNG image layer |
No website, FigCraft canvas, web framework, or unrelated export is created during CAD-to-3D work unless requested.
AWSM discovers an already installed cadcraft-cli from PATH, alongside solidcraft-cli. Detection does not open the apps or start the MCP processes. bridge_list({connect:false}) lists configured/installed integrations without connecting. For a 2D→3D task, the agent uses CADCraft inspect_drawing, query_entities, find_text, render, and relevant execute drawing-analysis commands (shapes, loops), then SolidCraft's modeling, inspection and render commands.
Important: cadcraft-cli mcp starts a headless drawing; it does not automatically read the document open in the CADCraft desktop app. To work with the user's visible drawing, start CADCraft with its control channel and configure an attached bridge in .awsm/bridges.json:
cadcraft --control 7979{
"version": 1,
"servers": {
"cadcraft": {
"command": "cadcraft-cli",
"args": ["mcp", "--connect", "127.0.0.1:7979"],
"allowedTools": [
"inspect_drawing", "query_entities", "find_text", "render",
"list_commands", "execute", "command_line", "script", "save"
]
}
}
}That snippet shows only the CADCraft entry. Merge it into any existing servers object rather than replacing the rest of .awsm/bridges.json. Explicit configuration takes precedence over auto-discovery. To disable CADCraft auto-detection, set AWSM_AUTO_CADCRAFT=0 for the AWSM process.
No automatic DXF→BIM conversion is claimed. CADCraft drafting entities do not inherently identify wall types, floors, windows or roof heights. The AWSM skill guides the agent to interpret blocks, layer naming, dimensions, room labels and closed shapes; validate units and openings; then reconstruct those elements using editable SolidCraft parameters. Heights and architectural details not present in the plan remain assumptions requiring explicit treatment. Validate a top-view SolidCraft screenshot, measurements and wall/opening alignment against the source plan before declaring completion.
Useful references: CADCraft MCP and SolidCraft MCP.
SolidCraft: installed-only 3D CAD integration
AWSM can automatically discover an installed SolidCraft CLI in your system PATH. You do not need to configure another MCP entry in OpenCode, copy SolidCraft's skills, or add a new AWSM tool. SolidCraft's own MCP remains responsible for its parametric CAD engine.
Install SolidCraft from its official website and ensure
solidcraft-cliis available onPATH(or specify the full executable through the optional config below).Restart AWSM after installation. Call
bridge_list({server:"solidcraft"})to see the detected integration without starting SolidCraft.When you request 3D modeling, the coding agent can run
bridge_list({server:"solidcraft",connect:true}). AWSM lazily launchessolidcraft-cli mcp --param-check strictand forwards tool calls throughbridge_call. This works headlessly or connects to the running SolidCraft desktop app according to SolidCraft's own behavior.
Auto-discovery does not auto-install SolidCraft, read app files, change a design, or start a CAD engine at AWSM startup. It discovers an installed executable only. To disable automatic detection, set AWSM_AUTO_SOLIDCRAFT=0 in the AWSM process environment.
For a custom path or a tighter tool allowlist, add the following server to .awsm/bridges.json. An explicitly configured solidcraft entry takes precedence over auto-discovery:
{
"version": 1,
"servers": {
"solidcraft": {
"command": "/absolute/path/to/solidcraft-cli",
"args": ["mcp", "--param-check", "strict"],
"allowedTools": [
"list_commands",
"describe_command",
"skill_reference",
"inspect_design",
"measure",
"screenshot",
"execute",
"batch",
"save",
"export"
]
}
}
}The awsm-design core skill now guides the agent through SolidCraft's native modeling and checking skills (accessible through skill_reference), including dimensioned sketches, constrained parameters, named features, staged batches and geometric measurement. For presentation-quality results, it guides deliberate camera framing, coherent material/opaque PBR appearances, and native screenshot/product-render workflows. This does not add 3D modeling algorithms to AWSM or guarantee stylistic fidelity without examining the rendered result.
Official technical references: SolidCraft MCP, modeling skill, checking skill, and product renders.
Publish 3D assets to a website and FigCraft
AWSM offers one optional handoff tool, publish_3d_asset, after the agent builds and verifies a model through the existing SolidCraft MCP:
SolidCraft model (editable .sc)
├── OBJ geometry → public/assets/3d/product/model.obj → interactive website
└── PNG model preview → public/assets/3d/product/preview.png
└── FigCraft image layer (when connected)The model remains editable in SolidCraft. FigCraft does not import a native editable 3D scene via this workflow; it places a 2D PNG representation in an actual FigCraft document. An OBJ in a website can be an interactive 3D model, not just a screenshot.
Build a SolidCraft model and verify both dimensions and style against the brief.
Make sure SolidCraft can write to the target website's
public/assets/3dfolder under its own file-access restrictions. When access is denied, add a narrow--allow-path /absolute/path/to/website/public/assets/3dto the trusted SolidCraft CLI configuration and restart; do not use--allow-any-path.If you also want to place the render directly into the visible FigCraft app, configure its native MCP in
.awsm/bridges.json, using its actualfigcraft-cli mcp --attach <port>command to connect to the running app. Enablerun_commandon its tool allowlist and grant FigCraft read access to the website assets via its documented automation roots. A plainfigcraft-cli mcplaunches a separate headless document, not the visible app.Ask your coding agent to call
publish_3d_assetwithprojectRoot,name, and optionallyfigcraftplacement coordinates. Example:
publish_3d_asset({
projectRoot: "/absolute/path/to/my-web",
name: "desk-speaker",
figcraft: { x: 160, y: 260, width: 520, height: 390 }
})The tool exports the current SolidCraft scene as OBJ and collects a PNG from its screenshot MCP tool. It creates a new package without overwriting an existing one and returns web paths, status and instructions. For FigCraft, it calls run_command → file.placeImage on the configured bridge; failed placement is reported separately from the website export.
For the web implementation, the coding agent adapts the existing stack: in React/Next.js use an established Three.js-based OBJ loader with loading/error states, responsive camera, and a static PNG fallback. OBJ does not preserve all SolidCraft materials or PBR fidelity. For production performance, use a separately verified local conversion pipeline to GLB/GLTF when available and optimize mesh complexity, render overhead and mobile behavior. AWSM does not bundle Blender, install rendering dependencies, or pretend SolidCraft's MCP exports GLB directly.
Matching a requested 3D style
The current AWSM skill can guide a coding agent to match a 3D style; it is not an automatic reference-image-to-CAD converter. When a user provides a visual reference that the agent can view, the awsm-design skill asks the agent to translate it into a compact style direction before modeling: silhouette, proportions, edge treatment, detail density, palette, surface finish, and camera/framing. If no image is accessible, use the text brief and do not claim image-based matching.
For example, an industrial-machined enclosure should use editable thicknesses, purposeful chamfers and restrained metal finishes, whereas a playful rounded desk accessory needs larger corner radii, simpler geometry and coherent matte color blocking. These choices affect model geometry, not just render filters. The agent should inspect the actual SolidCraft screenshot, compare it with the reference visually, correct the main mismatches, and re-measure after geometry edits. review_ui and pixel-diff tools are for web UI, not reliable semantic checks of CAD style.
SolidCraft is strongest for parametric hard-surface and product CAD. It does not become an organic sculptor or a full studio renderer just because AWSM supplies design guidance. Its current opaque PBR/product-image tools do not imply HDRI, refraction, transparent glass, cloth textures or guaranteed photorealism. The final result needs both geometry validation and visible style review; passing CI alone does not prove visual fidelity.
Safety: AWSM uses a constrained built-in allowlist, but execute and batch can modify the open design and save/export can write files. Configure the user's normal tool approval process and use SolidCraft's file-access protections. The default integration intentionally does not expose new_design or open; add them explicitly only when necessary and authorized.
Browser visual QA
review_ui combines a read-only DOM audit, responsive screenshots, and optional comparison against reference PNGs in a single local browser pass.
Install Playwright and Chromium in the target web project:
npm install -D playwright
npx playwright install chromiumStart the app's local development server, then ask the agent to run a review:
review_ui({
url: "http://127.0.0.1:3000/",
projectRoot: ".",
outputDir: ".awsm/review"
})Optional reference images can be supplied for pixel comparison, provided their physical dimensions match the capture viewport:
referenceImages: [
{ viewport: "desktop", file: "./figcraft-exports/desktop.png" }
]AWSM reports issues such as horizontal overflow, broken images, missing accessible names, placeholder links, and browser errors. When a reference is supplied it also reports pixel-difference regions.
What it doesn't do: edit application code on its own, test every interaction, certify WCAG compliance, or infer semantic design quality from pixels alone. External browser requests are intentionally blocked, which can affect remote font and photo rendering. Check blocked resources before judging fidelity.
Updates and existing installations
GitHub-source setup enables best-effort update checks on MCP restart using npx --prefer-online. Managed skill files are synchronized when AWSM starts. User-edited skills are preserved rather than silently overwritten.
This is not a background auto-updater. A running MCP session does not receive new code without restart, and caching/network conditions can delay a revision.
To refresh an existing AWSM configuration (including one installed from the old figcraft-mcp-awsm GitHub URL), run setup from the new repository:
npx -y --prefer-online github:rikoarik/artcraft-mcp-awsm setup \
--client opencode \
--source github:rikoarik/artcraft-mcp-awsm \
--upgrade-configUse --no-auto-update to disable startup revalidation or pin --source to a Git commit/tag for reproducible installations.
AWSM installs one default skill. The optional specialist library can be installed with --all-skills. Existing specialist skill folders are not deleted when returning to core mode.
Installer option | Purpose |
| Configure a specific agent; default |
| Install at user level rather than project level |
| Install the 21 optional specialist skills alongside |
| Update a previously recognized AWSM MCP configuration |
| Install only skills or only the MCP config |
| Disable startup package revalidation |
| Explicitly overwrite customized skill files; use with care |
If using a local Git clone rather than a GitHub-source npx entry, updates to that clone require git pull, npm ci, npm run build, and a server restart. A local checkout does not pull changes itself.
Development
git clone https://github.com/rikoarik/artcraft-mcp-awsm.git
cd artcraft-mcp-awsm
npm ci
npm testThe test script compiles TypeScript and runs MCP smoke tests. Optional Chromium fixture tests live in test/browser-e2e.mjs and have a separate GitHub Actions workflow.
For development issues or feature requests, open an issue.
Troubleshooting
AWSM not listed in the agent: confirm setup ran in the same project, inspect the client config, restart the MCP session and check the client's MCP status. For OpenCode V2, run
opencode mcp list.bridge_listreturns no servers: installcadcraft-cliorsolidcraft-clionPATHfor auto-detection, or add a custom server in.awsm/bridges.json(orAWSM_BRIDGE_CONFIG), then restart.Downstream connection error: use the provider's launch command directly to verify it works, and check the
allowedToolsnames. A provider requiring remote HTTP transport cannot be bridged with this stdio-only gateway.Visual review cannot run: install Playwright/Chromium in the target project, start the local web server, and use an explicit localhost HTTP URL with a port of at least 1024.
Scope and licensing
AWSM is an open-source local developer tool under the MIT License. There is no required paid hosting, but third-party image/font providers can have their own usage terms and rate limits. Verify licensing before using assets commercially.
FigCraft, CADCraft, SolidCraft, remote HTTP MCP servers, and application-specific code generation are not bundled into AWSM. The gateway connects to explicitly configured stdio MCP processes or discovered installed CADCraft/SolidCraft CLIs; it does not install those tools or support HTTP/SSE proxying.
Built for intent-driven design workflows: UI, drafting, parametric 3D, and optional handoff.
Available Tools
23 toolsaudit_ui_pageAudit Real Browser UIA
Read-only audit of localhost web UI using project Playwright: detects page overflow, offscreen elements, broken images, unlabeled controls, placeholder links, small buttons, and console errors at multiple viewports. No form actions or remote browsing.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Local HTTP page with explicit port 1024+. | |
| overwrite | No | Overwrite existing audit report when true. | |
| timeoutMs | No | ||
| viewports | No | Default mobile 375x812 and desktop 1440x900. | |
| reportPath | No | Optional JSON report destination; not overwritten by default. | |
| projectRoot | No | Project root containing Playwright installation. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does well: it declares the operation read-only and bounds scope (no form submissions, no remote browsing). It doesn't say where results land or how report overwriting behaves, but the safety profile is clearly disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense sentence, front-loaded with the read-only audit framing before the defect list and exclusions. The defect enumeration is long but each item is informative, with minimal waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter tool with no output schema, the description covers operation, safety scope, and viewport behavior adequately; destination and overwrite details are delegated to the schema's reportPath/overwrite descriptions. Missing only explicit guidance on prerequisites (a running local server) and result format.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 83%, so the schema already documents url, overwrite, reportPath, projectRoot, and viewports well. The description only echoes 'at multiple viewports' and adds nothing about the URL/port constraint or timeout semantics beyond the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource ('Read-only audit of localhost web UI') with an enumerated set of detected defects (overflow, offscreen elements, broken images, unlabeled controls, etc.). It clearly differs from siblings like review_ui, inspect_ui_project, and capture_ui_screenshots by being an automated defect-detection audit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It establishes the setting ('localhost web UI using project Playwright') and two exclusions ('no form actions or remote browsing'), which implies when it fits. However, it never names an alternative tool or states when to prefer review_ui or capture_ui_screenshots, so routing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bridge_callCall a Connected MCP ToolA
Forward a tool call to an explicitly allowed downstream MCP, returning original text/image/tool output. Use bridge_list with connect:true for available tool names and schemas. Calls may change files or other state; only configure trusted commands and allowlist necessary tools.
| Name | Required | Description | Default |
|---|---|---|---|
| tool | Yes | Exact downstream tool name returned by bridge_list. | |
| server | Yes | Configured downstream MCP name. | |
| arguments | No | JSON object of arguments matching the downstream tool input schema. |
TDQS
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 usefully discloses that calls are forwarded to an explicitly allowed downstream MCP, that output is returned as original text/image/tool output, and that calls may change files or other state. It does not cover failure behavior, timeouts, or auth propagation, but it covers the key mutation and trust constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three tight sentences: purpose first, then prerequisite discovery, then safety warning. Every sentence earns its place and nothing is buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a bridge tool with no annotations and no output schema, the description supplies the essential discovery path, return behavior, and mutation warning. It remains silent on error handling and downstream auth behavior, but it is complete enough for an agent to select and call the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents server, tool, and arguments. The description adds the allowlist/trust framing and points to bridge_list for tool names and schemas, but it does not add syntax or deeper parameter semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action, 'Forward a tool call,' and a specific resource, an explicitly allowed downstream MCP, with clear return types. It also distinguishes itself from the sibling bridge_list by assigning discovery to that tool rather than to bridge_call.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly directs the agent to use bridge_list with connect:true to obtain available tool names and schemas before calling. It also warns that calls may change files or other state and advises configuring only trusted commands and allowlisting necessary tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bridge_listDiscover Connected MCPsA
List explicitly configured downstream MCPs, optionally connect and discover their allowed tools with input schemas. Downstream servers run under the user's local permissions; a .awsm/bridges.json config is required.
| Name | Required | Description | Default |
|---|---|---|---|
| server | No | Optional configured bridge name, e.g. figcraft. | |
| connect | No | If true, start downstream servers and fetch their tools; otherwise list configurations without starting them. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description does useful work: it discloses that downstream servers run under the user's local permissions, that a specific config file is required, and that connect=true starts downstream servers while the default only lists configurations. It stops short of covering error behavior or permission prompts.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the main action, and no wasted text. The optional connect behavior and prerequisite are stated compactly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter tool with no output schema and no annotations, the description covers the key operational context: config prerequisite, local permission scope, and the difference between listing and connecting. Return shape is only briefly indicated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters are already documented. The description reinforces the connect parameter's behavior but adds little beyond the schema for the server parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'List explicitly configured downstream MCPs'. It also clarifies the optional discovery behavior, though it does not explicitly name or contrast the sibling bridge_call tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explains what connect=true does and notes that a .awsm/bridges.json config is required, but it gives no explicit when-to-use guidance versus bridge_call or other bridge-related tools. Usage is implied rather than directed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
capture_ui_screenshotsCapture Real UI ScreenshotsA
Use Playwright installed in the target project to capture mobile and desktop localhost screenshots with stable reduced motion, isolated contexts, blocked outbound network, and console error inventory. Does not install browsers automatically.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | HTTP localhost URL with dev-server port 1024 or higher. | |
| outDir | No | Screenshot folder, default <projectRoot>/.awsm/visual. | |
| fullPage | No | Full-scroll page capture; disabled by default for deterministic screenshot sizes. | |
| overwrite | No | Replace existing screenshots; default false. | |
| timeoutMs | No | ||
| viewports | No | Defaults: 375x812 mobile, 1440x900 desktop. | |
| projectRoot | No | Project root containing its own Playwright install. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses reduced motion, isolated contexts, blocked outbound network, console error collection, and the important limitation that browsers are not auto-installed. What is missing is the mutation profile — that screenshots are written to disk and may overwrite existing files (only visible via the schema), and nothing about runtime cost or failure modes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the action and engine, followed by the behavioral guarantees and the key limitation. No filler, and the most decision-relevant constraint (no browser install) is placed last for emphasis.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter tool with no output schema and no annotations, the description covers the environment, safety posture, and prerequisite well. The main gap is return semantics — it says a 'console error inventory' is produced but not whether/how it is returned or where screenshot paths surface in the response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 86%, so the schema already documents nearly every parameter including defaults and bounds. The description reinforces 'mobile and desktop' (the viewport defaults) and the localhost/Playwright-install prerequisites, but adds no syntax, units, or semantics beyond what the schema states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb ('capture') plus resource ('mobile and desktop localhost screenshots') and names the underlying engine (Playwright in the target project). It clearly separates this from pure analysis siblings like audit_ui_page, though it never explicitly names compare_ui_screenshots as the read/compare alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use Playwright installed in the target project' plus 'Does not install browsers automatically' implies the prerequisite (a local dev server and an existing Playwright install) and one exclusion. However, there is no explicit statement of when to choose this over compare_ui_screenshots or audit_ui_page, so routing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_contrastCheck WCAG Text ContrastA
Evaluate opaque foreground/background hex color ratios against WCAG AA and AAA; specify largeText for large type.
| Name | Required | Description | Default |
|---|---|---|---|
| pairs | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the burden. It does disclose two useful behaviors: only opaque colors are supported (no alpha compositing) and both AA and AAA thresholds are evaluated. However it never says what the caller receives back (raw ratio numbers vs. per-level pass/fail) and does not mention the 100-pair batch ceiling, leaving real gaps for a zero-annotation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight sentence with the core action front-loaded and the largeText hint trailing. No filler, no repetition of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations, no output schema, and 0% schema coverage, the description should anchor the return shape and the batch limits. It covers the input semantics adequately and the opacity constraint, but an agent still cannot predict the response structure or the 100-pair cap without reading the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate; it partially does by establishing that foreground/background are hex colors and clarifying that largeText maps to WCAG large-text thresholds. It says nothing about the label field or the min/max item constraints, so roughly half the parameter surface is still undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (evaluate), a specific resource (foreground/background hex color ratios) and the standard being applied (WCAG AA and AAA). No sibling tool in the list shares this domain, so there is no ambiguity to resolve and an agent can select it immediately.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the purpose statement (you call it when you need to verify color contrast compliance), but there is no explicit when-to-use/when-not-to-use guidance, no prerequisites, and no mention of how it relates to siblings like extract_design_tokens or audit_ui_page. The only directive offered, 'specify largeText for large type,' is parameter-level, not selection-level.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_ui_screenshotsCompare FigCraft Design and Web UIA
Compare two same-size PNG screenshots and optionally write a visible red difference heatmap. Reports percentage of differing pixels, mean absolute error, changed bounding box and threshold pass/fail; not semantic UX analysis.
| Name | Required | Description | Default |
|---|---|---|---|
| actual | Yes | Path to actual browser PNG capture. | |
| diffPath | No | Optional output path for a difference heatmap PNG. | |
| overwrite | No | Replace existing diffPath only when explicitly true. | |
| reference | Yes | Path to FigCraft PNG frame export or source screenshot. | |
| threshold | No | Per-channel max pixel difference to consider changed; default 20. | |
| maxChangedPercent | No | Acceptable changed pixel percentage, default 2%. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden well: it discloses that the heatmap write is optional, that it is destructive-safe ('only when explicitly true' via overwrite), and what metrics are returned. It does not explain failure behavior when image dimensions mismatch or what happens when diffPath exists and overwrite is false.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences pack purpose, output contract, optional side effect, and scope exclusion with no filler. The exclusion clause is placed last where it functions as a disambiguator without burying the primary action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description compensates by naming every returned metric, which is the critical gap-filler. For a six-parameter mutation-capable tool with no annotations, error/precondition handling (size mismatch, existing file) is the only notable omission.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all six parameters are already documented with defaults and ranges; the description reinforces the same ground (diff heatmap, threshold pass/fail, same-size requirement). It adds the semantic framing of the diff output but no parameter detail beyond the schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Compare two same-size PNG screenshots') and enumerates exactly what is produced: diff percentage, mean absolute error, changed bounding box, threshold pass/fail. The closing 'not semantic UX analysis' draws a bright line against siblings like review_ui and audit_ui_page.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The exclusion of semantic UX analysis implicitly routes pixel-level verification here and judgment-based review to review_ui/audit_ui_page. The 'same-size' precondition is stated, but no explicit when-to-use guidance or reference to capture_ui_screenshots as the upstream step.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
design_quickstartFast First UI PassA
Single-call brief-to-first-render plan: lightweight project detection, optional FigCraft layer classification and typography, first screen scope, relevant skills and viewport checks. Fast mode postpones exhaustive audits until after a usable preview.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | UI context; auto if omitted. | |
| root | No | Project directory if an existing codebase is available. | |
| brief | Yes | Product and UI request, with actual tasks/content if available. | |
| speed | No | Fast first pass by default, balanced or thorough for wider checks. | |
| document | No | Optional FigCraft inspect_document JSON. | |
| inspectAssets | No | Optional FigCraft inspect.assets JSON. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses that the tool is a single call, performs 'lightweight' detection, optionally layers in FigCraft data, and trades off audit depth in fast mode. But it does not clarify side effects—whether it writes files, modifies the project, or is purely a planning/read operation—nor does it explain return shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences, front-loaded with the core value proposition and followed by the speed trade-off. No filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a six-parameter orchestration tool with no annotations and no output schema, the description covers the main capabilities but leaves important gaps: it does not explain what the returned plan contains, whether the call has side effects, or how 'root' changes behavior. Adequate but not complete for a tool of this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description reinforces semantics for 'brief', 'speed', and the optional FigCraft inputs, but adds no new format, syntax, or constraint details beyond what the schema already documents.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific function: a single-call planner that turns a brief into a first-render plan, listing the components it covers (project detection, FigCraft classification, typography, first screen scope, viewport checks). It is clear what the tool does, though it never distinguishes itself from siblings like inspect_ui_project or audit_ui_page.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this is a first-pass tool by noting that 'fast mode postpones exhaustive audits until after a usable preview,' which hints at sequencing relative to deeper audit tools. However, it never names an alternative or explicitly states when to choose this over inspect_ui_project, audit_ui_page, or review_ui.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
download_assetDownload AssetA
Save one raster image from a URL to a project folder (default './assets'); maximum 10 MB, never overwrites an existing file. External SVG downloads are disabled. Check the source license first.
| Name | Required | Description | Default |
|---|---|---|---|
| dir | No | Destination folder (default './assets'). | |
| url | Yes | Image URL (HTTP or HTTPS). | |
| filename | No | Destination filename; defaults to the URL filename. Unsupported characters are sanitized. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden and discloses several important traits: a 10 MB maximum, no overwriting of existing files, and disabled external SVG downloads. It omits failure behavior, permissions/auth needs, and what is returned (e.g., saved path), but the core safety and constraint profile is unusually well covered for this tool type.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the action and destination, then adds constraints in short, scannable clauses. Every sentence earns its place; there is no redundant restatement of the title or schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple three-parameter download tool with no output schema, the description covers the critical constraints an agent needs to invoke it correctly. It could be slightly more complete by stating what happens on duplicate/overwrite attempts or what value is returned, but the essentials are present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents url, dir, and filename with defaults and sanitization notes. The description adds only the default folder path and URL context, not new parameter semantics; baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: save one raster image from a URL to a project folder. The raster-only and URL-source scope distinguishes it from sibling asset tools such as make_asset, find_images, and draw_icon without needing to open the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides a useful precondition ('Check the source license first') and a clear exclusion ('External SVG downloads are disabled'), but does not name alternatives for SVG handling or explain when to choose this over sibling workflows like make_asset or sync_figcraft_assets. Usage is mostly implied by constraints rather than explicitly routed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
draw_iconDraw Original UI IconB
Produce a local custom SVG icon from structured path, line, circle, rectangle, ellipse or polyline primitives authored by the coding agent. Not text-to-image generation; verify the rendered result.
| Name | Required | Description | Default |
|---|---|---|---|
| dir | No | Output folder, default ./public/icons/custom. | |
| name | Yes | Lowercase kebab-case filename, e.g. project-progress. | |
| size | No | Rendered icon dimensions, default 24. | |
| elements | Yes | Vector primitives in a 24x24 coordinate system. | |
| overwrite | No | Explicitly replace the target SVG; default false. | |
| strokeWidth | No | Outline width, default 1.75. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It discloses only that output is 'local' (a filesystem write) and that the caller should verify the rendering; it says nothing about overwrite behavior, whether the SVG is returned or only written, what permission or directory assumptions apply, or how failures surface. For an unannotated file-writing tool this is a significant disclosure gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core action and artifact, with the disambiguation and verification note packed into the second. No waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The input schema is rich and self-documenting, and the description covers the essential 'author primitives, not a prompt' mental model. However, with no annotations and no output schema, the agent gets no information on what the tool returns, what the file layout looks like beyond the schema's dir default, or what 'verify the rendered result' concretely entails. Adequate but with clear gaps for a tool that writes to disk.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so defaults, ranges, the 24x24 coordinate system and the primitive enum are all already documented in structured data. The description's enumeration of primitives merely restates the enum and adds no semantics beyond the schema. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and artifact: 'Produce a local custom SVG icon from structured ... primitives'. This clearly separates it from retrieval siblings like find_icons/get_icon by implying net-new creation, though it never names them. The 'Not text-to-image generation' clause sharpens the boundary against a different class of tool, giving an agent enough to select it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives one explicit exclusion ('Not text-to-image generation') and one usage instruction ('verify the rendered result'), but never says when to call this versus find_icons, get_icon, or make_asset. The implied rule — use this when you must author an original icon from vector primitives rather than look one up — is left for the agent to infer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
extract_design_tokensExtract Observed Design ValuesC
Collect observed FigCraft colors, font families, weights, sizes, radii and gaps; return token candidates and CSS primitives. Does not guess semantic color roles.
| Name | Required | Description | Default |
|---|---|---|---|
| document | Yes | Raw FigCraft layer tree; not a screenshot. | |
| maxNodes | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It discloses the extraction scope and that it will not guess semantic color roles, but it does not state whether the operation is read-only, what permissions are needed, how maxNodes affects traversal, or what the response shape looks like.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two compact sentences with the core action and scope front-loaded. Every phrase contributes either extracted value categories, output primitives, or an important limitation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter extraction tool with no annotations and no output schema, the description gives a useful high-level output description and one key caveat. However, it leaves maxNodes unexplained and does not describe the token-candidate output structure, so it is only minimally complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 50%: the document parameter is described as a raw FigCraft layer tree rather than a screenshot, but maxNodes has no semantic explanation beyond its numeric bounds. The description itself does not mention either parameter or explain how maxNodes constrains extraction.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb, 'Collect', and names the exact observed design values: colors, font families, weights, sizes, radii, and gaps. It also clarifies the return type at a high level, token candidates and CSS primitives, which makes the tool distinguishable from semantic palette tools, though it does not explicitly name sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is used to extract raw observed values from a FigCraft document, but it gives no explicit when-to-use guidance, prerequisites, or alternatives among siblings such as palette or inspect_ui_project. The only exclusionary note, 'Does not guess semantic color roles', is a limitation rather than routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_design_assetsBatch UI Image and Icon DiscoveryB
Search multiple relevant images and icons in one MCP call; concurrent capped provider requests and a short in-process cache reduce repeated design work. Discovery only; licensing and download remain separate.
| Name | Required | Description | Default |
|---|---|---|---|
| iconLimit | No | ||
| iconFamily | No | Iconify family, default lucide. | |
| imageLimit | No | ||
| iconQueries | No | Up to 4 distinct icon search phrases. | |
| imageQueries | No | Up to 4 image briefs for actual UI slots. | |
| imageProvider | No | Default openverse. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description does real work by disclosing capped concurrent provider requests and a short in-process cache, which warns the agent that results may be reused across calls. However, it says nothing about rate limits, failure modes, or what the response contains, leaving a meaningful gap for a no-annotation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact clauses with the core action front-loaded and the discovery-only boundary placed at the end. The phrase "reduce repeated design work" is mildly promotional but still conveys caching behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter tool with no annotations and no output schema, the description omits any indication of return structure (how many results per query, whether images and icons are separated) and does not cover the undocumented parameters. It is adequate to recognize the tool but not fully sufficient to call it confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67%, and the description adds no meaning beyond the schema — it never mentions query count limits, the default provider, or the default icon family. The baseline of 3 applies since the schema documents most parameters, but the description does not compensate for the remaining undocumented ones.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and combined resource set ("search multiple relevant images and icons in one MCP call"), which implicitly distinguishes it from the single-type siblings find_icons and find_images. It never names those siblings outright, so the differentiation is inferential rather than explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Discovery only; licensing and download remain separate" gives a useful boundary that points an agent toward a download step, but it never states when to pick this tool over find_icons or find_images, nor any prerequisites. Usage is implied rather than prescribed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_iconsFind IconsA
Search for free SVG icons through Iconify (no API key). Returns family:name identifiers and preview URLs. Choose one family (such as lucide) for a consistent UI.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of results (1–50; default 20). | |
| query | Yes | Icon search term, such as 'rocket', 'shopping cart', or 'cloud upload'. | |
| prefix | No | Limit icon families, such as 'lucide' or 'lucide,tabler'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It usefully discloses two facts an agent would otherwise have to discover: no API key is required, and results are identifiers plus preview URLs rather than inline SVG markup. It says nothing about result ordering, empty-result behavior, or rate limits, which is a meaningful gap for a search tool with zero annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, zero filler. Capability, return contract, and the key usage tip are all front-loaded, and each sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description correctly spends words on return values (family:name identifiers, preview URLs), which is exactly what an agent needs to chain into get_icon. The only shortfall is the missing pointer to that sibling tool and absent guidance on empty results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all three parameters are already documented and the baseline is 3. The description adds meaning beyond that by explaining the intent behind 'prefix' — pin one family (e.g., lucide) for visual consistency rather than mixing families — which is strategy the schema does not convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (search for free SVG icons via Iconify) and names the backing source, which distinguishes it from siblings like get_icon or draw_icon. It also previews the return shape (family:name identifiers, preview URLs), though it never explicitly names the alternative retrieval tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The closing sentence gives a real practice tip ('Choose one family... for a consistent UI'), implying this is the discovery step before fetching a single icon. However, it never states when to use this versus get_icon, find_images, or find_design_assets, so the routing decision is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_imagesFind ImagesA
Search for images by query. Providers: openverse (default, no key, commercially usable CC/PD results), pexels (PEXELS_API_KEY), unsplash (UNSPLASH_ACCESS_KEY), or picsum (random placeholders, not subject-matched). Verify source licenses before use.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of results (1–20; default 8). | |
| query | Yes | Photo search phrase, such as 'coffee shop interior warm light'. | |
| width | No | Image width for picsum only. | |
| height | No | Image height for picsum only. | |
| provider | No | Default: openverse. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does real work: it discloses credential requirements per provider, a licensing caveat ("Verify source licenses before use"), and a semantic warning that picsum results are not subject-matched. It omits return payload shape and any rate-limit or failure behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences: the action first, the provider routing second, the licensing caveat last. No filler and nothing buried past the opening clause.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a five-parameter search tool with no output schema, the description covers provider selection and the main correctness hazard (license/picsum mismatch). The one real gap is that it never indicates what a result contains (image URL, attribution, dimensions), which matters since no output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3; the description adds meaning beyond the schema by explaining what each provider enum value implies (keyless vs keyed, commercially usable vs placeholder) and by flagging the license check. It does not restate width/height or limit, which the schema already documents.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Search for images by query") and immediately enumerates the four providers, which distinguishes it from find_icons and find_design_assets. It never explicitly names those siblings, so differentiation is inferable rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete selection criteria between providers: openverse is the keyless default with commercially usable CC/PD results, pexels/unsplash require named env keys, and picsum is called out as random placeholders that are not subject-matched. It does not say when to prefer this over find_icons or find_design_assets.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_iconGet Icon SVGA
Retrieve SVG markup for one Iconify icon identified by family:name (such as 'lucide:rocket') for use in HTML or JSX.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Icon identifier in family:name format. | |
| height | No | Normalized icon height (default 64). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It discloses that the response is SVG markup and implies a read-only retrieval, but it does not address error behavior for unknown icons, authentication, rate limits, or whether markup is a raw string versus wrapped object.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is a single tight sentence with the retrieval action and identifier format front-loaded. Every clause adds useful context without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter retrieval tool with no output schema and full schema coverage, the description is largely complete: it states what is returned (SVG markup) and the intended consumer context (HTML/JSX). It stops short of covering failure modes or return structure, but those are secondary for this tool type.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters are already documented in the schema, establishing a baseline of 3. The description reinforces the 'family:name' format with an example ('lucide:rocket'), but does not explain the height parameter or its default beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Retrieve') and resource ('SVG markup for one Iconify icon') with an exact identifier format and example. It implicitly contrasts with search-style siblings like find_icons by specifying 'one' icon identified by 'family:name', but does not explicitly name alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The intended use ('for use in HTML or JSX') is stated, which gives context. However, there is no explicit guidance on when to use this instead of find_icons or other asset tools, and no exclusions or prerequisites are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_fontInspect or Install Google FontA
Fetch Google Fonts CSS2 WOFF2 face metadata; optionally install selected font weights to a local public/fonts folder with content hash, signature and overwrite safeguards. License and glyph coverage require review.
| Name | Required | Description | Default |
|---|---|---|---|
| dir | No | Output directory for install, default ./public/fonts. | |
| style | No | ||
| action | No | Default inspect; install writes local WOFF2 files. | |
| family | Yes | Exact Google Fonts family name. | |
| weights | No | ||
| overwrite | No | Allow overwrite of changed font file; default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so this description carries the full load and does reasonably well: it discloses that install writes local files, that content hashing and signature checking are applied, that an overwrite safeguard exists, and that licensing/glyph coverage are the user's responsibility. It omits return shape and failure behavior, which keeps it below 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact clauses; the read-vs-write distinction is front-loaded and the caveat is placed last as a closing warning. Dense but no wasted sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations and no output schema, the description should say more about what 'face metadata' actually contains and what happens on a hash/signature mismatch. The safety story is covered, but the inspection result is left opaque.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
At 67% schema coverage, the description adds meaning for the install/weights/overwrite path ('selected font weights', 'content hash, signature and overwrite safeguards'). But it never mentions the `style` parameter (an undocumented enum) or the `dir` default, so it doesn't fully compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Fetch Google Fonts CSS2 WOFF2 face metadata') plus the optional mutation ('install selected font weights'). The two modes are clearly distinguished, though nothing separates it from siblings (none of which are font tools, so the cost is low).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The word 'optionally' implies inspect-by-default and install-on-demand, but the description never states when to pick one mode over the other or any prerequisites (e.g., project must have a public/ dir). The warning 'License and glyph coverage require review' hints at a precondition without spelling it out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inspect_ui_projectQuick UI Project InspectionB
Bounded filesystem inspection: detect app framework, reusable components, existing assets, icon/design packages and scripts without recursive scans.
| Name | Required | Description | Default |
|---|---|---|---|
| root | No | Target local project directory; default current working directory. | |
| maxEntries | No | Upper bound for entries sampled per inspected directory. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral burden. It usefully discloses that inspection is bounded and avoids recursive scans, which is important context beyond the schema, but it does not explicitly state that the operation is read-only or describe output/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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no wasted words. It is dense but appropriately sized for the tool's scope.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With two optional parameters, full schema coverage, no annotations, and no output schema, the description covers the inspection scope adequately. However, it does not explain what kind of result is returned or clarify read-only behavior, leaving some contextual gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both root and maxEntries are already documented in the schema. The description adds only the general notion of bounded inspection and does not contribute additional parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific operation (bounded filesystem inspection) and explicitly lists what it detects: app framework, reusable components, assets, icon/design packages and scripts. It is clear what the tool does, though it does not distinguish itself from siblings such as find_design_assets or review_ui.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies a shallow, non-recursive scan but gives no explicit when-to-use guidance, prerequisites, or alternatives. An agent must infer that this is a quick initial survey rather than a deeper audit or asset search.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
make_assetMake AssetA
Create a text-based SVG template: an Open Graph card (1200×630), banner, monogram badge, or placeholder. Not an AI image generator; long text does not wrap automatically.
| Name | Required | Description | Default |
|---|---|---|---|
| dir | No | Output folder (default './assets'). | |
| kind | Yes | Asset type. | |
| label | No | Small label above the title on cards and banners. | |
| title | No | Main text (title or initials). | |
| width | No | Width in pixels (defaults vary by type). | |
| colors | No | Up to three hex colors: [background, secondary, accent]. | |
| height | No | Height in pixels (defaults vary by type). | |
| filename | No | Filename; .svg is appended when no image extension is supplied. | |
| subtitle | No | Supporting text on a single line. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden and delivers the two highest-value traits: output is text-based SVG, and long text does not wrap automatically (a real failure mode for callers). It omits file-write behavior such as overwrite semantics and what is returned after generation, leaving a gap for a tool that writes to disk.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core action and the enumerated asset types, then the two caveats. Nothing superfluous.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter generation tool with full schema coverage but no annotations and no output schema, the description covers the main pitfalls (no auto-wrap, not AI-generated) and pins the primary format. The missing piece is what the tool returns or writes (path, filename confirmation), which the agent would have to discover empirically.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all nine parameters are already documented by the schema. The description adds only one parameter-adjacent fact — the 1200×630 OG card dimension, which informs width/height defaults — which is a marginal gain over the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Create a text-based SVG template') and enumerates the exact asset types matching the kind enum: og-card, banner, badge, placeholder. An agent can distinguish this from image-fetching siblings like find_images or download_asset without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Not an AI image generator' explicitly rules out the closest wrong-tool assumption, orienting the agent away from image search/generation siblings. However, no positive when-to-use context or named alternatives (e.g., draw_icon, find_images) are given, so it lacks full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
palettePaletteA
Derive colors from a hex value using an analogous, complementary, triadic, or complete scheme (all three plus tint/shade). Returns CSS custom properties; check contrast before use.
| Name | Required | Description | Default |
|---|---|---|---|
| color | Yes | Hex color, such as '#1b7f5a'. | |
| scheme | No | Default: complete. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does well: it discloses the return format (CSS custom properties) and a genuine caveat that generated colors may fail contrast checks. It stops short of saying whether output is deterministic or how properties are named, but for a pure derivation function that is a minor gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences: capability and scheme options first, return type and caveat second. Nothing is redundant and nothing needs re-reading.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter, single-output helper with no output schema, the description covers inputs, output medium, and a safety caveat. Only the concrete shape/naming of the emitted CSS variables is unstated, a small omission given the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, so the baseline is 3. The description adds real meaning by glossing 'complete' as 'all three plus tint/shade', which the schema only marks as the default; the hex input format is left to the schema, which handles it adequately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (derive) and resource (colors) from a hex input, and enumerates the four scheme modes including what 'complete' means. An agent can distinguish this from check_contrast or extract_design_tokens without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'check contrast before use' gives a useful downstream workflow hint pointing toward the check_contrast sibling, but there is no explicit statement of when to choose palette over extract_design_tokens for existing colors. Usage is implied rather than prescribed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prepare_web_handoffPrepare FigCraft Web HandoffB
Classify FigCraft inspect_document layers as HTML/CSS, components, review items, or exportable assets. Generate a deterministic export plan and optional JSON manifest. Supply the raw inspect_document JSON, not a screenshot.
| Name | Required | Description | Default |
|---|---|---|---|
| document | No | Raw JSON from FigCraft inspect_document. | |
| exportDir | No | Folder for FigCraft native export files, default ./figcraft-exports. | |
| overwrite | No | Allow replacing an existing handoff manifest. Default false. | |
| outputPath | No | Optional path to save the handoff manifest as JSON. | |
| documentPath | No | Local JSON file from FigCraft inspect_document. Use instead of document. | |
| inspectAssets | No | Optional output of FigCraft inspect.assets. | |
| inspectAssetsPath | No | Optional JSON file containing FigCraft inspect.assets output. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry behavioral disclosure, and it does reveal the deterministic planning behavior and that a manifest may be written. It does not state that this writes files to disk (implied only by the exportDir/overwrite params), nor whether existing files are affected, nor any permission or execution-cost considerations for a filesystem-mutating tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences with the classification capability front-loaded and no filler. Slight density cost: 'FigCraft inspect_document' is referenced as a bare tool chain without explanation, but the structure is otherwise efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Seven parameters with none required leaves real ambiguity about which inputs are mandatory and whether the document/documentPath and inspectAssets/inspectAssetsPath pairs are mutually exclusive; the description does not clarify this. Since there is no output schema, the description should at least sketch what the export plan/manifest contains, which it does not.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameter meanings are already fully documented in the schema, which sets the baseline at 3. The description's 'raw inspect_document JSON, not a screenshot' restates the document parameter's schema description rather than adding new meaning, and it says nothing about resolving the document vs documentPath or inspectAssets vs inspectAssetsPath pairs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses specific verbs and resources: it classifies inspect_document layers into four named categories and generates a deterministic export plan plus optional JSON manifest. The purpose is unmistakable, but no sibling tool (e.g., inspect_ui_project, extract_design_tokens, sync_figcraft_assets) is referenced to help an agent choose between this and neighboring asset/design tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The one explicit usage rule — 'Supply the raw inspect_document JSON, not a screenshot' — is genuinely useful input guidance. However, there is no statement of when to prefer this over alternatives (e.g., extract_design_tokens or inspect_ui_project) or prerequisites such as needing a prior inspect_document call, so usage is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
review_uiOne-Call UI ReviewB
Capture and audit real localhost web UI in one browser pass, optionally compare matching FigCraft screenshot references, and return prioritized UI issues and visual mismatch regions. Requires project-local Playwright.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Local HTTP application URL with port 1024+. | |
| outputDir | No | Capture and heatmap directory, default .awsm/review. | |
| overwrite | No | Replace previous screenshots/report; default false. | |
| threshold | No | Per-channel pixel difference threshold. | |
| timeoutMs | No | ||
| viewports | No | Default mobile 375x812, desktop 1440x900. | |
| reportPath | No | Optional machine-readable review JSON file. | |
| projectRoot | No | Project directory containing Playwright dependency. | |
| referenceImages | No | ||
| maxChangedPercent | No | Percentage of pixels allowed to differ, default 2%. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the Playwright dependency and that it returns prioritized issues and mismatch regions, but does not state side effects such as writing screenshots/heatmaps to disk or how overwrite affects prior output. This is partial but not complete behavioral context for a 10-param tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense sentence that front-loads the core action and return value, with the Playwright requirement appended last. No wasted framing, though the requirement could be separated for scannability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex 10-parameter tool with no output schema and no annotations, the description gives a reasonable conceptual picture of the return (prioritized issues, mismatch regions) and the key prerequisite. However it omits side-effect/file-output details and the relationship to the granular sibling tools, leaving gaps an agent must infer.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is high (~80%), so the schema already documents most parameters including ranges and defaults. The description adds only the mapping of 'optional FigCraft reference comparison' to the referenceImages concept; baseline 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a clear compound verb+resource: capture and audit a real localhost web UI in one browser pass, optionally comparing FigCraft references and returning prioritized issues. The phrase 'in one browser pass' implicitly distinguishes it from the granular siblings (capture_ui_screenshots, compare_ui_screenshots, audit_ui_page), though it never names them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The prerequisite 'Requires project-local Playwright' is a useful usage gate, and 'optionally compare' flags conditional behavior. But there is no explicit guidance on when to choose this over the dedicated capture/compare/audit siblings, leaving the primary routing decision to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_icon_setSave Consistent SVG IconsB
Download a group of Iconify SVG icons from one family into a local project folder, without overwriting existing icons by default. Returns a path and checksum for each icon.
| Name | Required | Description | Default |
|---|---|---|---|
| dir | No | Destination folder, default ./public/icons. | |
| icons | Yes | Icon identifiers in the same family, e.g. lucide:users, lucide:settings. | |
| height | No | SVG height (default 24). | |
| overwrite | No | Replace changed existing SVG files. Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden. It does note the non-destructive default and the returned path/checksum, but omits whether network access is required, what happens for unknown icon identifiers, how files are named, and whether the overwrite flag replaces or merges changed files. For a filesystem-writing tool with zero annotation coverage, that is a meaningful gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two front-loaded sentences with zero waste: the action and scope come first, then the return shape. Nothing is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully says it returns a path and checksum per icon, closing the main return-value gap. Remaining omissions are error/failure behavior and network requirements, which keep it from a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%; each of dir, icons, height, and overwrite is documented including defaults. The description only echoes the overwrite default already in the schema and adds no meaning beyond it, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: downloading a group of Iconify SVG icons from a single family into a local project folder. The batch/file-write nature implicitly separates it from get_icon and find_icons, but no sibling is named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The batch-persist scope implies when to reach for it, but the description never says when to prefer it over get_icon (single fetch) or find_icons (discovery), nor does it state prerequisites such as family consistency or the 40-icon cap for batching.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
serveServe PreviewA
Start or stop a localhost-only static preview for HTML, CSS, JS, and SVG. Hidden files are blocked. Not a deployment service; do not serve files containing secrets.
| Name | Required | Description | Default |
|---|---|---|---|
| port | No | Starting port; tries subsequent ports if occupied. | |
| root | No | Folder to serve (default '.'). | |
| action | No | Default: start. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the whole behavioral burden. It does disclose two real traits: binding is localhost-only and hidden files are blocked. But it says nothing about server lifecycle — whether 'start' launches a persistent background process, what it returns (a URL/port?), whether repeated starts stack, or how 'stop' identifies which server to stop when no port is supplied.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the core capability and followed by the two constraints that matter most. No filler, no restatement of the title, and the security warning lands where a reader will actually see it.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool that starts and stops a server process, the missing pieces are lifecycle and return information: does start yield a URL the agent can hand to a user, and is the server persistent across later calls? With no annotations and no output schema, the description is the only place those could be stated, and they aren't. Adequate for the happy path, incomplete for an agent managing a running process.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with per-parameter descriptions already covering the port fallback behavior, the root default of '.', and the action default of 'start'. The description adds no parameter-level detail beyond that, so the baseline 3 applies rather than a higher score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb pair ('start or stop') and a precisely scoped resource ('localhost-only static preview for HTML, CSS, JS, and SVG'). The 'Not a deployment service' line pre-empts the most likely misreading, though no sibling is named — the other tools in the set (icons, design tokens, screenshots) are far enough away that explicit differentiation isn't critical.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context for when this applies (local static preview of web assets) and an explicit exclusion via 'Not a deployment service'. It also warns against serving files with secrets, which is a use-time constraint. It stops short of naming an alternative tool for handoff/deployment scenarios, which the sibling list suggests exists (prepare_web_handoff).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sync_figcraft_assetsSync FigCraft Exports into Web AssetsA
Copy only files listed in an AWSM handoff manifest from the native FigCraft export directory to /figcraft, recording SHA-256 hashes, missing files and conflicts. Does not export from FigCraft itself.
| Name | Required | Description | Default |
|---|---|---|---|
| handoff | No | Handoff JSON returned by prepare_web_handoff. | |
| exportDir | No | Native FigCraft export directory; default ./figcraft-exports. | |
| overwrite | No | Replace changed assets. Default false. | |
| publicDir | No | Web public folder; default ./public. | |
| handoffPath | No | Local path to the saved handoff JSON. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses that only manifest-listed files are copied and that hashes/missing files/conflicts are recorded, but says nothing about overwrite semantics (the overwrite param exists in the schema, but its effect isn't described), permissions, or whether the operation is idempotent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with zero filler; the positive behavior comes first and the scope exclusion is front-loaded at the end. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a file-writing tool with no annotations and no output schema, the description is only partly complete: it never explains overwrite behavior, what happens on conflict, or what the recorded results look like. The schema fills in defaults, but mutation semantics are left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline 3 applies. The description adds mild value by tying the handoff manifest, the export directory, and the <publicDir>/figcraft destination together conceptually, but adds no format or default details beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (copy manifest-listed files from the FigCraft export dir to <publicDir>/figcraft) and adds a negative scope clause: 'Does not export from FigCraft itself,' which separates it from the sibling prepare_web_handoff. The only gap is that it doesn't name prepare_web_handoff as the prerequisite, though the schema field for handoff does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Does not export from FigCraft itself' implies the agent should call the export/handoff step first, but neither the ordering nor the alternative tool is stated explicitly. There are no exclusions beyond that single clause and no prerequisites spelled out.
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.
23 tool updates
v1.0.0- First observed
audit_ui_page - First observed
bridge_call - First observed
bridge_list - First observed
capture_ui_screenshots - First observed
check_contrast - First observed
compare_ui_screenshots - First observed
design_quickstart - First observed
download_asset - First observed
draw_icon - First observed
extract_design_tokens - First observed
find_design_assets - First observed
find_icons - First observed
find_images - First observed
get_icon - First observed
google_font - First observed
inspect_ui_project - First observed
make_asset - First observed
palette - First observed
prepare_web_handoff - First observed
review_ui - First observed
save_icon_set - First observed
serve - First observed
sync_figcraft_assets
TDQS
Scored across 23 tools
Most tools target clearly distinct resources and actions (find_icons vs get_icon vs save_icon_set, palette vs check_contrast, bridge_list vs bridge_call). A few overlaps exist: find_design_assets aggregates find_icons/find_images, and review_ui composites capture_ui_screenshots and audit_ui_page, so an agent must decide between the granular and combined tools. Descriptions do clarify the boundaries reasonably well.
The dominant pattern is snake_case verb_noun (find_icons, get_icon, save_icon_set, check_contrast, inspect_ui_project), applied consistently across the majority of tools. Minor deviations exist: 'palette' is a bare noun and 'serve' a bare verb, and the bridge_list/bridge_call pair uses a prefix style rather than verb_noun. Readable and predictable overall.
23 tools is on the heavy side for a design/asset workflow server and sits in the borderline 16-25 band. Most tools do earn their place given the broad domain (icons, images, assets, color, fonts, FigCraft handoff, screenshots, audits, bridges), but the surface is large enough to feel sprawling and increases selection burden. Scoping down or merging composite tools would help.
The domain of design-asset and UI-review workflow is broadly covered: discovery (icons, images), creation (draw_icon, make_asset), styling (palette, google_font, check_contrast), preview (serve), FigCraft ingestion (prepare_web_handoff, sync_figcraft_assets, extract_design_tokens), and UI verification (capture/compare/audit/review). Minor gaps exist: no way to list or clean up previously saved assets, and no image optimization step. Core workflows are not blocked.
Maintenance
Related MCP Connectors
MCP server for building and testing AI agents with multi-model experimentation and insights.
MCP server for your apps' tools and custom tools, plus hosted AI agents and approval-gated workflows
Hosted MCP server and Agent Skills for specs, engineering threads, and project memory.
Hosted MCP for creating, checking, deploying, and hosting static sites for AI agents.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceMCP server that enables AI coding agents to read and write to a local-first HTML/CSS design canvas, bridging visual design and code generation.1MIT
- AlicenseBqualityAmaintenanceA local stdio MCP server that enables coding agents to discover credential handles and create scoped action requests with local approval and sanitized output.7131 npm15Apache 2.0
- AlicenseNot gradedqualityBmaintenanceA self-hosted MCP server that enables AI coding agents to read, edit, search, and run code in local projects with human review loops and policy controls.MIT

Identity Forge MCPofficial
AlicenseAqualityAmaintenanceMCP server for design kits and brand workflows. Coding agents can browse and apply design systems, create brand projects, and research names, domains, and EUIPO marks.6177 npmMIT