Claude Code + moodspec
Add moodspec as an MCP server and Claude reads your canvas before it writes a line of UI.
Setup · about 2 minutes
- Get your endpointOn your canvas, press Connect agent. Pro generates a private MCP URL for that canvas.
- Add the serverRun claude mcp add --transport http moodspec <your-url>, or paste the JSON below into your settings file.
- Restart Claude CodeRun /mcp to confirm moodspec is listed and connected.
- Reference it in promptsSay "follow the moodspec canvas" once — Claude keeps it in context for the session.
{
"mcpServers": {
"moodspec": {
"type": "http",
"url": "https://mcp.moodspec.app/c/brand-soul",
"headers": { "Authorization": "Bearer msk_live_••••" }
}
}
}What changes in practice
Ask for "a pricing page" and Claude uses your display font, your accent, your radius scale and your customer's language — instead of inventing a purple gradient. Ask "does this match our taste?" and it can answer from the canvas.
Confirm it is connected
/mcpmoodspec is listed as connected, with six tools under it. If the server is listed but the tool count is zero, the connection succeeded and the token was rejected.
When it does not work
/mcp lists moodspec as failed
- Claude Code parsed the config but could not reach the endpoint — almost always a URL missing the /c/{slug} path, or a corporate proxy in front of it. Curl the endpoint with the same bearer token. A 401 or 403 means the URL is right and the token is not; a connection error means the URL never resolved.
Connected, but tool calls come back 403 locked
- The token was issued for a different canvas, or the tool needs a scope the plan does not carry. get_history and propose_change are history:read and canvas:write, both Business. Reissue the token from Connect agent on the canvas you actually mean, and check which scope each tool needs.
Claude ignores the canvas even though /mcp is green
- Nothing in the prompt gave it a reason to call a tool. MCP is pulled, not pushed. Say "follow the moodspec canvas" once at the start of the session. Claude keeps it in context from there and calls get_canvas itself.
Edits to the settings file change nothing
- Claude Code reads MCP config at startup, and a project-scope file wins over a user-scope one. Restart Claude Code, then run claude mcp list to see which scope the server was actually loaded from.
Questions
Which config file should the block go in?
- ~/.claude/settings.json applies the server to every project on the machine. A .mcp.json at the repo root applies it to that repo only and can be committed, which is what a shared team canvas wants.
Do I need a paid plan for this?
- MCP is on Pro. The free tier keeps one canvas in the browser with no account, and the private endpoint is generated per canvas on Pro.
Can Claude Code change my canvas?
- Only by proposing. propose_change is the single write tool and it puts the edit in an approval queue — nothing moves until an owner approves it.
What happens when I hit the rate limit?
- The endpoint returns 429 slow_down with a Retry-After header saying when the window resets. Pro allows 600 calls an hour per token, which is far more than an interactive session uses.
Does this replace CLAUDE.md?
- No. CLAUDE.md holds instructions that belong to a repo; a canvas holds design decisions that belong to a brand and are the same in every repo. Most teams keep both, and use CLAUDE.md to tell Claude to read the canvas.