motionprompts for developers
259 production-grade GSAP/WebGL animation components, each with a live demo, a copy-paste build prompt and motion metadata measured from the real code. Everything below is public, read-only and key-free: there is nothing to sign up for.
Quickstart
# the whole catalog, one request
curl https://motionprompts.dev/api/v1/components.json
# one component's build prompt (markdown)
curl https://motionprompts.dev/prompts/tunnel.md
# add the hosted MCP server to Claude Code
claude mcp add --transport http motionprompts https://motionprompts.dev/mcp
# or run the MCP locally via the official CLI on npm
claude mcp add motionprompts -- npx -y motionprompts-mcp
REST API
Static JSON, served by nginx. Spec: OpenAPI 3.1.
| endpoint | what it returns |
|---|---|
| /api/v1/components.json | all 259 components: motion metadata, capabilities, conflicts, URLs |
| /api/v1/motion-systems.json | the 8 motion systems and their ease/duration/stagger tokens |
| /api/v1/composition-rules.json | hard + soft rules for composing components into one page |
| /prompts/<slug>.md | the build prompt for one of the 30 free components (text/markdown) |
| /prompts/<slug>.preview.md | the first 12 lines of a paid prompt (text/markdown) |
| /api/premium/prompt/<slug> | the full prompt of a paid component — needs a session cookie; 402 with the preview otherwise |
No sandbox needed: production IS the sandbox — every catalog endpoint is safe to call from anywhere, including browsers (CORS is open on the MCP endpoint; the JSON files are plain same-origin-safe GETs).
Paid prompts
30 of the 259 components publish their prompt as a plain file; the other
229 need a plan. What stays public for every component, paid or not: the page, the live
demo, the whole motion block in components.json,
and the first 12 lines of the prompt. What needs a plan: the rest of the prompt
(/api/premium/prompt/<slug>, Unlimited or above) and the downloadable source
(/api/premium/source/<slug>, Full Stack).
Each entry in components.json tells you which is which: access is
"free" or "paid", prompt is null for the paid
ones, and prompt_api is always there. A request without a session answers
402 with {"error":"plan_required","preview":"…"} — parse it and point
the human at /pricing/ instead of retrying.
The MCP server works the same way: no key gets you the catalog and the free prompts; an MCP key from a Full Stack plan (/account/) unlocks the rest.
Versioning & deprecation
Path-versioned. /api/v1/ is canonical; the unversioned /api/ paths
are aliases that always serve the latest major version. A breaking change ships as
/api/v2/ while /v1/ keeps working for at least 6 months, announced in
llms.txt and with a Deprecation header on the old endpoints.
Additive changes (new fields) land without a version bump — parse leniently.
Rate limits
30 requests/second per IP, burst 60. Advertised on every API response via
RateLimit-Policy headers; exceeding it returns 429 with a
Retry-After header and an RFC 9457 body. The whole catalog is one request —
prefer /api/v1/components.json over many small calls.
Errors
API errors follow RFC 9457 (application/problem+json):
type, title, status, detail. A 404 body
points you at the OpenAPI spec and the slug list; a 429 body tells you the limit you hit.
HTML pages return an agent-friendly 404 with recovery links instead.
MCP server
A hosted Model Context Protocol endpoint lives at
https://motionprompts.dev/mcp (Streamable HTTP, stateless, no auth): 13 tools to plan a page's
architecture, pick animation mechanics per section, check composition contracts and fetch build
prompts. Discovery manifest: /.well-known/mcp.
claude mcp add --transport http motionprompts https://motionprompts.dev/mcp
To run it locally over stdio, use the official CLI on npm —
motionprompts-mcp:
claude mcp add motionprompts -- npx -y motionprompts-mcp. To self-host the
HTTP mode, clone
VanguardiaAI/motionprompts-mcp
and follow its README.
Agent access
Start at /llms.txt — it explains what this library is and, more
importantly, what it is not. Every HTML page also negotiates markdown: request any
page with Accept: text/markdown and you get its markdown twin with
Vary: Accept.