claude.design-mcp
This server lets you control the real claude.ai/design web app from your editor or agent, driving your own logged-in browser session to create, iterate on, and manage AI-generated web designs.
Login: One-time browser-based authentication to
claude.ai/design; session persists for all subsequent operations.List Projects: Retrieve all your existing Claude Design projects from your account.
Create a Design: Submit a prompt to generate a new design project, with optional name, AI model (e.g., Opus, Sonnet), design system, and wait-for-completion behavior.
Iterate on a Design: Send follow-up prompts to an existing project to modify or refine a design.
Generate Variants: Create multiple design variants from one prompt in parallel.
Pull Files: Download a project's generated files to a local directory, with optional ZIP output.
Preview a Design: Render a project's HTML to a full-page PNG screenshot for visual review.
Read a File: Fetch the contents of a specific file within a project.
Check Status: Poll a project's generation state (generating, awaiting_input, done, no_output) and chat turn summary.
Edit a File: Apply direct string edits to a project file without re-prompting the AI.
Delete a Project: Permanently remove a design project (requires confirmation).
Manage Design Systems: Upload local design-system packages to your account and list existing design systems.
Click on "Install 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., "@claude.design-mcpCreate a design for a tech startup landing page"
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.
claude.design-mcp
An MCP that drives the real Claude Design web app from your editor/agent — log in once, then create, iterate on, and pull designs that claude.ai/design generates on your own account (not a local imitation).
How it works
It drives your own logged-in Chrome (a dedicated profile) over CDP with
playwright-core, and talks to the realclaude.ai/design"Omelette" API as you, through your browser session.Generation is triggered the way the website does it — your prompt is typed into the design composer and submitted; the tool then waits for the turn to finish (the
ReleaseTurnnetwork signal + file-tree stability) and reports the files Claude Design wrote. Files are pulled back to local on request.Project metadata, files, deletes, and direct file edits use the documented JSON RPCs (
CreateProject/ListFiles/GetFile/EditFile/DeleteProject), run in-page so they share your session + Cloudflare clearance.Not a
claude -pmimic. Every design is produced by claude.ai/design itself.
Related MCP server: Browser Agent MCP
Tools
Tool | Does |
| One-time: open Chrome to log into claude.ai/design (session persists) |
| List your claude.ai/design projects |
| Create a project and generate a design from a prompt — |
| Generate multiple design variants of one prompt in parallel — |
| Send a follow-up prompt to modify a design — |
| Download a project's files to local — |
| Render a project's self-contained HTML to a full-page PNG for review — |
| Read one file from a project — |
| Report a project's chat/turn state — |
| Poll an asynchronous generation — |
| Apply a direct file edit — |
| Delete a project — |
| Upload a materialized design-system package folder to claude.ai as a design system, by running Claude Code |
| List the design systems on your account (name + id), across every page of the project list |
Setup
npm install # installs playwright-core (NO browser download — uses your Chrome)
node src/server.mjs login # opens Chrome once; log into claude.ai (session is then reused, invisibly)Register as a local MCP (opencode example):
{ "mcp": { "claude-design": { "type": "local", "command": ["node", "/abs/path/claude.design-mcp/src/server.mjs"], "enabled": true } } }CLI
node src/server.mjs login
node src/server.mjs list
node src/server.mjs list-systems
node src/server.mjs create "minimal landing page for a coffee shop" coffee --model opus
node src/server.mjs create "simple pricing card" pricing --design-system "Frontend Design System"
node src/server.mjs iterate <projectId> "add a dark mode toggle to the header" --model sonnet
node src/server.mjs check <projectId>
node src/server.mjs pull <projectId|name>
node src/server.mjs preview <projectId|name> [outDir] [width]
node src/server.mjs delete <projectId>
node src/server.mjs sync <packageDir> [--timeout-ms 900000]After the one-time login, list/create/iterate/pull run with no visible window
(off-screen Chrome) and reuse the persisted session.
Generation options
design_create,design_iterate, anddesign_variantsaccept an optionalmodel. Use a family (opus,sonnet,haiku, orfable) to select that family's newest version from the live claude.ai/design menu. Pin a version with forms such asopus-4.8,opus-5,opus 5.0,claude-opus-4-8, oranthropic/claude-opus-5. New family versions become available automatically when they appear in the site menu. If a requested version is unavailable, the error lists the live menu options. For CLIcreateanditerate, pass the same value to--model.design_create,design_iterate, anddesign_variantsaccept an optionaldesignSystem(CLI--design-system), the name of one of the account design systems reported bydesign_system_list. It is matched case-insensitively, an unambiguous partial name works, and an unknown name errors with the list the composer offers. The chosen system replaces the org default rather than adding to it, and the result echoes the resolved name. claude.ai only offers the picker while a project has produced no design yet, sodesignSystembelongs ondesign_create; ondesign_iterateit works only for such a project and otherwise errors instead of silently ignoring the request.design_variantsgrounds every variant in the same system.design_createanddesign_iterateacceptwait(defaulttrue). Setwait: falseto return immediately after submission with{ submitted: true, pending: true }; the CLI equivalent is--no-wait.design_createwith an explicitnameis find-or-create: an existing project with that exact name is reused (newest wins on collisions) and the result carriesreused: true, so repeated calls iterate one project instead of piling up duplicates. Passfresh: trueto force a new project. Withoutname(prompt-derived name), every call creates a new project as before.Poll submitted work with
design_check({ projectId }), ornode src/server.mjs check <projectId>. Itsstatusisgenerating,awaiting_input,done, orno_output.
Asynchronous workflow
# 1. Submit without waiting
node src/server.mjs create "카드 UI" my-card --no-wait --model opus
# → { projectId: "...", submitted: true, pending: true }
# 2. Continue with other work...
# 3. Poll for completion (every 2-5 minutes is recommended)
node src/server.mjs check <projectId>
# → { status: "done", files: [...] }
# 4. Pull and preview the finished design
node src/server.mjs pull <projectId>
node src/server.mjs preview <projectId>Requirements
Node.js 22+ (uses built-in
fetch/WebSocket;playwright-coreis the only npm dependency)Google Chrome (the tools drive a dedicated Chrome profile)
A claude.ai account with Design access (you log in once via
design_login)
Env
CLAUDE_DESIGN_PROFILE— dedicated Chrome profile dir (default~/.cache/claude-design-mcp/chrome-profile)CLAUDE_DESIGN_CHROME— path to Google Chrome (default: macOS Google Chrome)CLAUDE_DESIGN_CDP_PORT— remote-debugging port (default9377)CLAUDE_DESIGN_DIR— wheredesign_pull/design_previewwrite, each into its own<project>/folder (default: the working folder); an explicitdirargument is used verbatimCLAUDE_DESIGN_HEADLESS— set1to drive headless Chrome instead of off-screenCLAUDE_DESIGN_TURN_TIMEOUT_MS— hard cap per generation turn (create ~360s, iterate ~240s defaults)CLAUDE_DESIGN_QUIET_MS— how long the turn network must stay silent before a generation is judged complete (default20000)CLAUDE_DESIGN_CLAUDE_BIN— Claude Code binary used bydesign_system_sync(defaultclaude)CLAUDE_DESIGN_SYNC_TIMEOUT_MS— hard cap for one/design-syncrun (default900000, 15 minutes)
Design-system sync
design_system_sync (CLI: sync <dir>) is the one tool that does not drive the browser: it
runs claude -p "/design-sync" --dangerously-skip-permissions --output-format json with the
package folder as its working directory and reports what the sync uploaded.
The folder must already be a package (
package.json+ a CSS entry such asstyles.css, plustokens/*.json,guidelines/*.md,README.md). Components are optional — a tokens-only package is accepted. The tool refuses before spawning ifpackage.jsonis missing.Exit status is not the success signal. A refused sync still exits
0withsubtype: "success", so the result is onlyok: truewhen the reply carries a real project link; otherwise you get{ ok: false, error, raw }with the full output for diagnosis.A first run creates the project and writes
.design-sync/config.json, which pins later runs to the same project (an unchanged re-run is then a no-op instead of a duplicate). If your pipeline regenerates the folder, snapshot.design-sync/before replacing it and restore it afterwards — this tool never writes the package itself.A first sync takes ~10 minutes; unchanged re-runs take ~2. The CLI exits
1on a failed sync.
design_system_list (CLI: list-systems) is the read side of the same feature. claude.ai has no
separate design-systems endpoint — design systems are returned by the ordinary project list RPC
tagged PROJECT_TYPE_DESIGN_SYSTEM, which pages 20 at a time, so the tool follows every page and
returns [{ name, id, publishedAt?, viewedAt? }] (publishedAt appears only once a system has
been published). Use it to confirm what design_system_sync actually landed on the account.
scripts/probe-design-systems.mjs re-captures that live shape if the API changes.
When is a generation "done"?
claude.ai/design drives generation as turns: your prompt streams in over a Chat RPC,
kept alive by RenewTurn keepalives (~every 10s) and ended by a ReleaseTurn. design_create /
design_iterate return once the files have settled AND the turn network has gone quiet for
CLAUDE_DESIGN_QUIET_MS — comfortably longer than the keepalive interval, so a generation is never
cut off mid-write (you always get a complete, coherent design, not a half-rendered one).
If a generation reaches its hard deadline before the quiet/stability checks complete, the result includes
timedOut: true. Normal completions omit the field entirely; treat its presence as a signal that the
returned files are the best available snapshot at the timeout rather than a fully quiet turn.
Note that claude.ai often runs an automatic refine pass that starts ~30s after the first design
settles, so the design keeps improving on the server after the tool has returned its first complete
version. To get the most-refined output, design_pull / design_preview always fetch the latest
state, or raise CLAUDE_DESIGN_QUIET_MS (e.g. 60000) to make create wait through later refine
passes (at the cost of a longer wait).
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseBqualityDmaintenanceEnables automation of browser tasks using Playwright by interacting via Claude Desktop for executing user-defined prompts and operations.1212MIT
- TypeScriptMozilla Public 2.0
- Flicense-qualityBmaintenanceEnables Claude Code to control a real browser using AI for web scraping, competitive intelligence, and UX auditing through the MCP protocol.
- Alicense-qualityDmaintenanceEnables natural language browser automation through Claude, wrapping Playwright to execute commands like navigation, clicking, form filling, and screenshots.1730MIT
Related MCP Connectors
Read, edit, publish, and preview your pepita websites from Claude.
Provides cloud browser automation capabilities using Stagehand and Browserbase, enabling LLMs to i…
Build, version, review, and export websites, web apps, and games from a conversation.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/coin-seeker/claude.design-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server