MCP server for Canvas Builder — let AI agents build, refine, publish, and download real multi-page websites.
Canvas Builder MCP demonstrates solid tool design with clear naming conventions (verb_noun pattern), comprehensive descriptions (avg 180 chars), and well-structured input schemas using Zod validation. All 8 tools have explicit descriptions and typed parameters. However, output schemas are not documented, responses are returned as raw JSON without formal schema declarations. Error handling is present but generic (ApiError class). Tool descriptions could be more concise (some exceed 200 chars). Missing tool annotations (readOnlyHint, destructiveHint, idempotentHint) for risk classification. No pagination support documented for list-like operations.
Build a complete multi-page responsive website from a plain-language description. Builds run asynchronously and typically take a few minutes — poll get_site_status until status is 'complete'. Costs the linked user's credits (scaled to size/complexity).
Download a completed site as a .zip file containing all HTML, CSS, JS, and assets. Returns a download URL valid for 24 hours.
Check a build's status. Returns building | complete | error, plus the live URL (if published) and metadata. When complete you can refine, publish, or download.
Start the one-time device-link flow to connect this MCP server to the user's Canvas Builder account. Returns a URL the user must open and approve. After they approve, call link_account_poll with the code. Scopes: sites:build (build/refine/download — default), sites:publish (publish to a live URL), sites:domain (attach custom domains). Request only what's needed.
Poll the device-link flow after the user approves. On success the access token is stored locally (~/.canvasbuilder/token) and all other tools start working.
Output schemas not documented. Tools return raw JSON responses without formal schema declarations. LLMs cannot predict response structure for downstream planning.
Tool annotations missing. No readOnlyHint, destructiveHint, or idempotentHint declarations. Risk metadata is provided in tool descriptions but not in machine-readable form.
Error messages lack recovery guidance. ApiError class returns status codes and messages but does not classify errors as retryable, user-fixable, or fatal.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 59 | 2026-07-28+ | v2 |
Publish a completed site to a live URL at https://<subdomain>.cnvs.site. Requires the sites:publish scope (granted at link time).
Request changes to an existing site in plain language (e.g. 'Make the hero darker and add a pricing section'). Runs asynchronously — poll get_site_status until 'complete'. Costs credits.
Show the linked Canvas Builder account: user id, granted scopes, credit balance, token expiry.
Asynchronous operations (build_site, refine_site) lack confirmation/dry-run pattern. No way to preview changes before committing credits.
Parameter descriptions exceed 200 chars in several tools (build_site.description, link_account.description). Verbose descriptions waste tokens and bury key details.