MCP · local, stdio, no account
The MCP server for your coding agent.
The server runs on your machine over stdio and needs no account. It answers three questions an agent asks before adding motion: what exists for this intent under this byte budget, how is it built, and what do I run.
# in your project
claude mcp add moonarc -- npx -y @moonarc/mcpCursor, VS Code and Codex take the same command in their config files, below.
Connect your coding agent.
Every agent starts the server with npx -y @moonarc/mcp. Only the file that says so differs.
# in your project
claude mcp add moonarc -- npx -y @moonarc/mcp// .cursor/mcp.json
{
"mcpServers": {
"moonarc": { "command": "npx", "args": ["-y", "@moonarc/mcp"] }
}
}// .vscode/mcp.json
{
"servers": {
"moonarc": { "type": "stdio", "command": "npx", "args": ["-y", "@moonarc/mcp"] }
}
}# ~/.codex/config.toml
[mcp_servers.moonarc]
command = "npx"
args = ["-y", "@moonarc/mcp"]What your agent can ask.
No account and no limit. The catalogue ships inside the package, so the answers need no network.
- search_motion(intent, max_js_bytes?, tier?, limit?)
- Components for an intent under a JavaScript budget in raw bytes. max_js_bytes: 0 returns only the ones with no script of their own. limit: how many, best first (10 unless set, at most 50).
- get_component(name)
- Source, props and craft notes: easing, duration, the reduced-motion branch, ClientRouter behaviour.
- get_install_command(names, method?)
- The exact command. The agent runs it; the server never writes files.
- get_usage()
- Plan and quota. The free tier needs no account and has no limit.
Copy the source instead
get_install_command with method: "copy" answers with a shadcn CLI command, and the CLI reads components.json. An Astro project has none. Write this one instead of running shadcn init, which would add React; package.json stays as it is. Files land in src/components/moonarc/ and src/lib/moonarc/ and import one another through the @/* alias, which tsconfig.json needs (Setup has the line).
{
"$schema": "https://ui.shadcn.com/schema.json",
"style": "new-york",
"rsc": false,
"tsx": true,
"tailwind": {
"config": "",
"css": "src/styles/global.css",
"baseColor": "neutral",
"cssVariables": true
},
"aliases": {
"components": "@/components",
"utils": "@/lib/utils",
"lib": "@/lib"
},
"registries": {
"@moonarc": "https://moonarc.dev/r/{name}.json"
}
}With a Pro key.
Three more tools appear when the server finds a key in MOONARC_KEY. Your key is on your account.
- audit_motion(paths, format?)
- Checks your components and style sheets against 13 rules, among them transition: all, layout properties in transitions and keyframes, motion without a prefers-reduced-motion branch and astro:page-load listeners with no teardown. Each finding has its line, a severity and the fix.
- measure_budget(dist, ceiling?, base?, format?)
- The JavaScript each page of your build loads, measured the way this site's CI measures its own: scripts, every chunk they import and framework islands, with the router and Moonarc's share apart. Pages over your ceiling are marked.
- compose_section(intent)
- A hero, an FAQ, a feature grid, a logo strip, a testimonial wall, a stat row or a call to action, as ordered components with their total cost and a skeleton to adapt.
With a key, the server sends it to Polar's license API to check it, and keeps a definite answer while it runs. get_usage says which plan it validated. What Pro includes
Pass the key to the server
Your agent starts the server, and most agents pass it only a few of your environment variables. A key exported in your shell may never arrive, so name it in the agent's config:
# keep an option between --env and the name
claude mcp add --env MOONARC_KEY=<your key> --transport stdio moonarc -- npx -y @moonarc/mcp// .cursor/mcp.json: the key from your environment
{
"mcpServers": {
"moonarc": {
"command": "npx",
"args": ["-y", "@moonarc/mcp"],
"env": { "MOONARC_KEY": "${env:MOONARC_KEY}" }
}
}
}// .vscode/mcp.json: VS Code asks for the key once and stores it
{
"inputs": [
{ "type": "promptString", "id": "moonarc-key", "description": "Moonarc license key", "password": true }
],
"servers": {
"moonarc": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@moonarc/mcp"],
"env": { "MOONARC_KEY": "${input:moonarc-key}" }
}
}
}# ~/.codex/config.toml: forwards MOONARC_KEY from your environment
[mcp_servers.moonarc]
command = "npx"
args = ["-y", "@moonarc/mcp"]
env_vars = ["MOONARC_KEY"]The same tools in CI.
The package is also a command, so a build can fail on a motion error or on a page that loads too much JavaScript.
# with MOONARC_KEY set from a secret
npx -y @moonarc/mcp audit src
npx astro build
npx -y @moonarc/mcp measure dist --ceiling 30000auditexits 1 when it finds an error.measurereads the folderastro buildwrote, and finds a server build'sdist/clientby itself.--ceilingis raw bytes per page,--basethe base path when your site sets one. It exits 1 when a page is over the ceiling.- Both exit 2 on a usage mistake, a refused key or a folder that is not a build.
- Your account has a workflow that sets the key from a secret.
Without a tool call.
Every page on this site is also Markdown: append .md to a component or docs URL. /llms.txt is the whole catalogue in one token-light file.