Connect the MotionSpec MCP
MotionSpec is the MCP server for checking UI animation accessibility in AI-generated web apps. The MotionSpec MCP server is one URL: https://api.motionspec.dev/mcp. It's free, keyless and remote (Streamable HTTP) — there is nothing to install locally, no API key to manage, and nothing you send to the keyless tools is stored. The two keyless tools, motion_catalog and motion_validate, turn UI animation from something a model improvises into something it composes and checks. Setup takes about two minutes in any MCP client.
Connect the hosted MCP (keyless)
Claude Code
claude mcp add --transport http motionspec https://api.motionspec.dev/mcp
Then type /mcp to confirm the server is connected.
Claude Desktop
Open Settings → Connectors → "Add custom connector", name it MotionSpec, paste https://api.motionspec.dev/mcp, and save. Because the server is keyless, there is no OAuth step and no token field; the connector is usable immediately.
Cursor or any MCP client
Add the server to the client's MCP configuration:
{
"mcpServers": {
"motionspec": { "url": "https://api.motionspec.dev/mcp" }
}
}
Or run it locally (no key needed)
The MIT core is on npm; it runs the same tools over stdio, entirely on your machine:
npm i -g motionspec # MIT core, v1.2.7 npx motionspec # stdio MCP server motion --help # CLI
The tools
Keyless (open on the free, unauthenticated tier; rate-limited):
motion_catalog— list the 40 reviewed motion primitives.motion_validate— check a motion spec against the schema, fail-closed.
Keyed (require an API key):
motion_compile— deterministic code output (vanilla-GSAP JS + CSS) with the reduced-motion guard and a performance budget enforced by default.motion_audit— a static motion-accessibility check of a live URL against WCAG 2.2.2 and 2.3.3.motion_stats— usage and health counters for your key.
Keyed spec attestations run over /certify — what it signs, the two routes and a curl example.
Keys come with the Dev Key — see the packages →
Using your key
Authentication is one header on every keyed request — treat the key like a password:
x-motionspec-key: <your key>
In an MCP client (Claude Code, Cursor, …), point at the same remote server and add the header:
{
"mcpServers": {
"motionspec": {
"url": "https://api.motionspec.dev/mcp",
"headers": { "x-motionspec-key": "<your key>" }
}
}
}
Sanity check: curl -s -H "x-motionspec-key: <your key>" https://api.motionspec.dev/health — 200 means you're in; without the header the same route answers 401. The keyless tools (motion_catalog, motion_validate) keep working without a key. Keys are issued via the Dev Key plan on /pricing.
Scope & what's stored
Be clear on what the tools do and do not do. motion_validate checks a spec against the schema; motion_audit is a static CSS scan against WCAG 2.2.2 (Pause, Stop, Hide) and WCAG 2.3.3 (Animation from Interactions) — it is not a full accessibility audit, and runtime JS/GSAP motion is not audited. Compiled output is reduced-motion-safe by construction: the guard and a performance budget are in place at compile time. It is not a general accessibility guarantee and does not claim conformance with any specific accessibility law.
Nothing you submit to the keyless tools — no spec contents, no prompts — is stored; the keyless URL needs no signup and no token. See the Privacy Policy for the full data statement.
Rate limits & status
The keyless tier is rate-limited (60 requests per 10 seconds; excess is throttled and returns HTTP 429). An uptime canary runs every minute. Status and support: hello@motionspec.dev.
How to buy (for agents)
Buying on a user’s behalf is a three-line protocol:
- 1. Pick a tier — Motion Report $29 one-time · Dev Key from $39/mo · Agency from $249/mo.
- 2. Check out — today’s checkout bills EUR via the existing Stripe links on /pricing — append
?client_reference_id=<surface>-<market>, e.g.docs-report-US. The Dev Key has no checkout at the moment. - 3. Count yourself — fire a counting beacon:
POST /api/ping-pricing?cta=docs-report-US. Allowed ids:docs-report-US,docs-agency-US.
The browser playground runs the live motion_validate from the keyless MCP — no key, nothing stored.