motionprompts

dev.motionpromptsPublished by motionprompts.devOfficial publisherv1.1.1Updated Oct 24, 2026

Plan pages, pick GSAP motion components and get their build prompts and composition rules.

VerifiedStreamable HTTPWeb executable

Overview

motionprompts's hosted MCP server (motionprompts.dev), published by motionprompts.dev; optional API key; Streamable HTTP; 14 tools.

No AI overview yet: these facts come from the registry entry and the server itself.

Publisher
motionprompts.dev
Endpoint
motionprompts.dev
Last checked

Installation

In SourceWeft

  1. Open motionprompts in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/dev.motionprompts%2Fmotionprompts/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config.

{
  "mcpServers": {
    "motionprompts": {
      "type": "http",
      "url": "https://motionprompts.dev/mcp"
    }
  }
}

README

motionprompts MCP

[motionprompts: GSAP and WebGL components, each with a live demo and a validated prompt]

An MCP server over a catalog of 259 production-grade GSAP motion components (motionprompts.dev). A curated set of components is free with the full prompt; the rest of the library returns a 12-line preview until you pass a Full Stack key (Authorization: Bearer mpk_..., from motionprompts.dev/account). Plans: motionprompts.dev/pricing. It does not generate animations: it hands you the ones that are already solved and debugged, tells you how to compose them without them fighting each other, and says so plainly when the catalog does not have what you asked for.

What it exposes

ToolWhat for
plan_pageThe information architecture of a page: 9–14 sections with their role, their job, and whether they should move. Deliberately returns no components.
suggest_mechanicsMechanics for one section, filtered by the real facets of its role. Knows how to answer that there is nothing.
suggest_page_treatmentsThe twin of suggest_mechanics for mechanics that belong to the page, not a section slot: smooth scroll, shaped edges between sections, running backgrounds.
get_integration_contractRepairs, mount order and budget for a set of components. It is what stops two entry veils from coexisting, and — given moving_sections — what tells you to your face that the page is under-animated.
plan_imageryImage direction section by section: which shot is needed, with which model (people, objects and landscape are not interchangeable), how to get transparency, and where real logos come from. Returns text: it generates nothing.
get_component_promptThe author's prompt verbatim + the motion-system tokens + the instruction to adapt it yourself.
search_componentsFree-text search with lexical_coverage: reliable for saying "there is nothing here", not for saying "this is the best".
search_components_motionSearch by measured motion metadata (trigger, cluster, easing, duration) instead of by looks.
get_componentMeta, preview, prompt and — where the distribution carries it — source.
list_facets · list_components · list_motion_systems · get_motion_systemVocabulary and tokens.
render_promptDeprecated; use get_component_prompt.

Hosted endpoint — no install

The server runs live at https://motionprompts.dev/mcp (Streamable HTTP, stateless; a Bearer key is optional and unlocks the paid prompts). Add it to Claude Code with one command and you are done:

bash
claude mcp add --transport http motionprompts https://motionprompts.dev/mcp

Discovery manifest: motionprompts.dev/.well-known/mcp.

Local installation

Requires Node 20 or newer. No API key and no environment variables for the free set; the local package carries only the free prompts in full (the paid ones as previews), so for the whole library use the hosted endpoint with your key.

The package is on npm as motionprompts-mcp — no clone needed:

bash
claude mcp add motionprompts -- npx -y motionprompts-mcp

Or from a clone:

bash
git clone https://github.com/VanguardiaAI/motionprompts-mcp.gitcd motionprompts-mcpnpm install

Claude Code

bash
claude mcp add motionprompts -- node /absolute/path/to/motionprompts-mcp/mcp/server.mjs

Claude Desktop and other clients

In the client's JSON configuration:

json
{  "mcpServers": {    "motionprompts": {      "command": "node",      "args": ["/absolute/path/to/motionprompts-mcp/mcp/server.mjs"]    }  }}

Check that it works:

bash
npm run verify      # end-to-end battery over the real MCP protocol

To self-host the HTTP endpoint instead of stdio: npm run start:http (defaults to 127.0.0.1:4478; configure with MCP_HTTP_HOST / MCP_HTTP_PORT).

About API keys: none needed

This server uses no key and cannot spend anyone's money. It reads no environment variables, asks for no secrets, and makes not a single network call: it opens files from disk and returns text. It is a catalog reader.

That includes plan_imagery, which talks about image models and transparent backgrounds: it returns text. It is a recipe, not a generator. It names the three models we use ourselves because that is the useful information — which one is for what — but it calls none of them, and the writing and cut-out rules work the same with whatever provider you prefer.

If you came looking for the notice about kie.ai: that key belongs to a separate authoring tool — the one that generated the photography for the example pages — which is not part of this package. It is excluded on purpose, so nothing in here can generate images or bill anyone. If you want photography for your pages, use whatever service you prefer with your own account.

How to use it well

Order matters, and it is the hardest thing to get right:

  1. plan_page first. It returns sections, not components: a page can only be as rich as the list it is composed from, and composing straight from animation mechanics flattens it to five sections. Adjust the list to the actual brief before going on.

  2. suggest_mechanics per section, with avoid to exclude what you already used. Without it you will repeat components: broad roles offer a hundred-plus candidates with tied scores, and reusing the same need string always returns the same first hit.

    avoid is for not repeating yourself, not for animating less. If you discard the #1 because it is taken, take the #2 — they are tied. A section left static because its first candidate was already used is the most expensive failure of this flow, and it was literally an if in the example script.

  3. get_integration_contract with all the slugs at once, before writing a line, and with moving_sections set: it is the coverage audit.

  4. get_component_prompt per component. Re-dress, don't reimplement: change images, copy, palette, typography and element counts, and keep the mechanic. Discard a component only if its MECHANIC does not fit — never on aesthetic taste.

  5. plan_imagery before writing a single image prompt, with the same section list.

Five roles are declared catalog gaps (faq, data, pricing, testimonial, reference): there is nothing for them among the 259 components. But "no component" does not mean "this section stays still": they are three to five sections out of a thirteen-section page, and suggest_mechanics returns for each one a recipe written in the token vocabulary (hand_written_recipe). For everything else, adopt.

Overshoot rather than undershoot

plan_page returns a motion_coverage block with the math done: how many sections should move, which are covered by adopting and which by recipe. One of them ending up with nothing is a defect of the page, not a style decision. The mistake people make is not excess: it is spreading four mechanics across the showy sections and leaving the rest blank. What saves a page from noise is not scarcity of motion — it is everything moving in the same language, and the motion system already takes care of that.

Images are what still gives a generated page away

With architecture and motion solved, what keeps ringing false is the imagery. plan_imagery encodes the three measured defects and their remedy:

  • The image belongs to the industry, not to the section. Competitor test: if the prompt would work unchanged on a competitor's page, it is generic. It must carry a fact that is only true on this page.
  • Nobody appears. People go to nano-banana-2 and only that one: the other two give them a recognizable tint or plainly cannot do faces.
  • Everything is a rectangle with a background. Cut-outs go to gpt-image-2.5 with background: transparent, which returns real alpha (the magenta chroma key is kept only as a fallback for old raws). And they are requested in sheets of six — an invisible 3×2 grid — because a generation costs the same whether it carries one or six. A shot that fails on one detail is retouched image-to-image from its own raw, not re-rolled.

And logos are never generated: they are looked up on Wikimedia (Wikidata → P154 → Commons). No model draws a real logotype without breaking the letters, and a marquee of invented brands reads as fake instantly.

Pages built with it

The source repository contains five complete pages built with this server, each with a README documenting which mechanic was adopted, which was re-dressed and which was discarded and why. Every component in the catalog has a live demo and build notes at motionprompts.dev.

What this distribution does NOT carry

The components' source code. You get the prompts, the metadata, the composition rule engine and the server. You do not get each piece's index.html / script.js / styles.css.

That is not a gap: it is how these are meant to be used. The prompt is the product — a self-sufficient brief that rebuilds the mechanic from scratch and adapts it to your page, instead of pasting someone else's component into it. The example pages were built exactly that way: adopting mechanics and re-dressing them, not copying code.

get_component with include: ['source'] says so explicitly and returns the live demo and the prompt URL instead. Everything else — search_components, plan_page, suggest_mechanics, get_integration_contract, get_component_prompt — works the same.

License

PolyForm Noncommercial 1.0.0 with mandatory attribution. Noncommercial use allowed; commercial use requires a separate license. Any permitted use must keep the notice and visibly credit motionprompts.dev. See LICENSE.

It is not an OSI-approved license, so npm and GitHub will flag it as non-standard. If you are going to rely on it for anything serious, have a lawyer read it: I am not one.

Source: README.md at commit d6b96ee

Tools

14

search_components

Search components

Find the components that best fit a natural-language brief (e.g. "un hero elegante para una marca de lujo", "cartas apiladas al hacer scroll") or a name/alias. Returns a ranked, compact list with a `why` for each hit. Combine the free-text `query` with facet filters to narrow. Then call get_component on the chosen slug. Leave `query` empty to browse purely by filters.

ParametersdepsmoodlevellimitqueryuseCasecategorymobileSafemaxPerfCost

get_component

Get component

Fetch one component by slug. `include` controls the payload: 'meta' (full catalog record), 'preview' (thumbnail + live demo URL), 'prompt' (a self-contained brief to REBUILD it faithfully), 'source' (the actual index.html/styles.css/script.js to copy, plus an integration note). Default: meta + preview + prompt. Add 'source' when you want the real code.

Parametersslugrequiredinclude

list_facets

List facets

Return the filter vocabulary (mood, useCase, level, perfCost, category, deps) with how many components carry each value. Call this first to learn the exact values search_components accepts.

Takes no parameters.

list_components

List components

Browse the whole catalog as a compact list (slug, title, useWhen, mood, useCase, level, perfCost). Use for an overview or when a brief is vague; use search_components when you have a specific brief.

Parameterslimitoffset

list_motion_systems

List motion systems

The 8 motion systems of the library: token sets (ease/duration/stagger/lenis) derived from the measured inventory, not invented. Use this FIRST when composing a page: pick one system and render every component's prompt with it so the page moves coherently.

Takes no parameters.

get_motion_system

Get one motion system with its members

Full token set of a motion system plus the components that are native to it.

Parametersnamerequired

search_components_motion

Search components by measured motion metadata

Filters by the CAPA-1 motion block (trigger, libs, complexity, motion system) rather than by prose. Prefer this over search_components when composing a page: `category` describes how a component LOOKS, `trigger`/`cluster` describe how it MOVES, and they disagree — the `slider` label alone splits across 3 opposite physics.

Parameterslibslimittriggercategorycomplexitymotion_systemmax_complexity

get_integration_contract

Integration contract for a set of components

Given the slugs you intend to put on ONE page, returns: rule violations (hard, invalidate the page), warnings, the measured budget (JS gzip / assets / scroll corridor), and an ordered init plan — single Lenis instance, CustomEase registration, entry veil first, one ScrollTrigger.refresh() at the end, WebGL loop gating. Every step cites the evidence it comes from.

Parametersslugsrequiredmotion_systemmoving_sections

plan_imagery

Dirección de imagen de una página, sección a sección

Qué imagen necesita cada sección, CON QUÉ MODELO se hace y cómo se redacta el prompt. Con la arquitectura y el movimiento resueltos, lo que sigue delatando una página generada son las imágenes: genéricas del sector en vez de específicas de la sección, sin una sola persona, y todas rectángulos con fondo. Esta tool devuelve el enrutado por modelo (personas ≠ objetos ≠ paisaje: no son intercambiables), la receta de transparencia (alfa real de gpt-image-2.5 con `background: transparent`, ya sin magenta), la del retoque con referencia (image-to-image para corregir un detalle sin volver a tirar el dado), la de las hojas de seis recortes por generación, y de dónde salen los logotipos reales (Wikimedia, nunca generados). NO genera imágenes, no usa ninguna clave y no hace ninguna llamada de red: devuelve texto. Llámala DESPUÉS de plan_page y ANTES de escribir un solo prompt de imagen.

Parametersbriefpalettesectionsarchetype

plan_page

Plan a page's information architecture from a brief

Returns the SECTIONS a page of this kind needs — 10 to 14 of them, each with a role, what it has to accomplish, what content it needs, and whether it should move — plus a motion system and its tokens. It returns NO components on purpose: a page can only be as rich as the list it is composed from, and composing from animation mechanics caps every page at five sections. Ask for mechanics afterwards, one section at a time, with suggest_mechanics. It also names the roles the catalog cannot cover, so you write those from the system tokens instead of adopting the least-bad search hit. An optional `reference` contributes STATIC art direction and biases the motion system — motion is NEVER derived from the reference.

Parametersbriefrequiredarchetypereference

suggest_mechanics

Mechanics for ONE section, by its role

Given a section role from plan_page and what that section has to do, returns ranked candidate components — filtered first by the catalog facets that actually correspond to the role, then ranked by the free-text need. Prefer this over search_components when building a planned page. Crucially, it can answer that the catalog has NOTHING for a role (counters, progress bars, pricing tables, FAQ accordions, data tables) instead of returning the least-bad hit dressed up as an answer — search_components cannot tell you that, and its top result for 'accordion' is a horizontal image gallery. When the verdict is `none`, write the section from the motion system tokens; that is a legitimate outcome, not a failure.

Parametersneedrolerequiredavoidlimitadoptedmotion_system

suggest_page_treatments

Mechanics that apply to the PAGE, not to a section

The twin of suggest_mechanics for the family that does not fill a section slot: smooth scroll, the shaped edge BETWEEN two stacked sections, a background that runs behind the whole page, a custom cursor, route transitions. These were unreachable from the planner because the whole model assumed a mechanic occupies one slot in `sections` — which is why a page could be planned end to end and still butt every section together with a straight line. A treatment does NOT consume a section and does NOT count toward motion_coverage; it adds on top. Some kinds are decisions rather than components (`scroll-suave`) and come back with verdict `not-a-component` instead of a fake candidate list. Still pass whatever you adopt to get_integration_contract: treatments compete for the same capabilities (scroll owner, document height) as any other component.

Parameterskindrequiredneedavoidlimitmotion_system

get_component_prompt

Get a component prompt + motion tokens (no rendering)

THE way to get a build prompt. Returns three blocks: (a) the standalone prompt VERBATIM, untouched; (b) the tokens of the requested motion system; (c) an explicit instruction telling you to adapt (a) to (b) YOURSELF, preserving arithmetic relationships — if a duration holds up a sum, a chained sequence or a ScrollTrigger `end`, recompute the whole set, never a lone value. Replaces render_prompt, which substituted mechanically and produced prompts whose prose contradicted their code (11/30 in judged evaluation). See DECISIONS.md D15 and D18.

Parametersslugrequiredmotion_system

render_prompt

[DEPRECATED — use get_component_prompt] Render a prompt by mechanical substitution

DEPRECATED in favour of get_component_prompt. Mechanical substitution does not fit this corpus: the prompts narrate their own numbers in prose, so replacing only the code values makes prose and code specify different components (judged 11/30). Coverage is deliberately narrow: 164 of 219 components have ZERO substitutable values because their prompts narrate their own numbers in prose ('over 4s', 'durations are 1'), and substituting those would make prose and code contradict each other. For those components this returns the prompt unchanged. See DECISIONS.md D15. Returns the component's build prompt with its motion tokens (ease/duration/stagger) replaced by the chosen motion system's values, so several components share one timing language. Values that are STRUCTURAL to the effect (elastic overshoot, loop cadence, scrub linearity, shader/physics constants) are never substituted — they come back listed under 'Valores no parametrizables'. Omit `system` to use the component's native one.

Parametersslugrequiredsystem

Version history

1
  1. v1.1.1LatestOct 20, 2026

Score

90% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts

    Declare a license in the repository or the registry entry.

Other Motionprompts integrations