collectui
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@collectuiAnalyse this and match the timing exactly: https://collectui.com/designs/ui-interaction"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
collectui-mcp
Show your coding agent a design, not a screenshot.
You find a beautiful UI animation on CollectUI. You want Claude Code (or Codex, or Cursor) to build something like it. So you screenshot it, paste it in, and... the agent sees one frozen frame. It has no idea the dropdown springs open over 240ms, overshoots by 7%, and settles. It guesses. You get generic ease-in-out mush.
This MCP server fixes that. Paste a CollectUI link and your agent gets the actual numbers.
What your agent actually receives
Real output, from a real post:
0.69s → 0.92s · TRANSITION · 231ms · translation — content travels right 75px
- Change focused on the upper-centre-right (81% of the change energy)
- Displacement: dx +75px, dy +0px (within the 644×350 content box)
- Best-fit easing: expo-out (snappy) → cubic-bezier(0.16, 1, 0.3, 1) (R²=0.98)
- Overshoot of 7% — a spring, not a plain ease
Where the movement happens:
| ░▓▓░|
| ░░██░|
| ░|
| ▒|
| ▒▓ |That last bit is a heat map of the frame. Your agent can see the motion is in the top-right — not just that "something moved."
The brief also includes the colour palette (with contrast ratios), the layout structure, whether the animation loops seamlessly, and it ends with copy-pasteable CSS and framer-motion to start from.
All of that is about 2,500 tokens. No images required.
Why not just send frames?
A 5-second GIF is ~150 frames. Sending even a fraction of those costs tens of thousands of tokens, and it still can't tell your agent that a transition is 231ms — because you can't measure time from a pile of stills.
So this measures the video directly and writes the answer down in words. Text is smaller, more precise, and more useful.
Images are still available when you want them — they're just opt-in, and the ones you get are chosen at meaningful moments (the start of a transition, its peak, where it settles) rather than sampled blindly.
Setup
1. Prerequisites
You need Node 18+ and ffmpeg.
brew install ffmpeg(On Linux: sudo apt install ffmpeg. On Windows: grab it from ffmpeg.org and make sure it's on your PATH.)
2. Get the code
git clone https://github.com/rayhankhilji/collectui-mcp.gitThen install and build it:
cd collectui-mcp && npm install && npm run build3. Connect it to your agent
Pick whichever one you use. In every case, replace /path/to/collectui-mcp with wherever you actually cloned it — an absolute path, not a relative one.
One command:
claude mcp add collectui --scope user -- node /path/to/collectui-mcp/dist/index.js--scope user makes it available in every project. Use --scope project instead if you only want it in the current repo.
Verify it connected:
claude mcp listAdd this to ~/.codex/config.toml:
[mcp_servers.collectui]
command = "node"
args = ["/path/to/collectui-mcp/dist/index.js"]Add this to ~/.cursor/mcp.json (or .cursor/mcp.json inside a project):
{
"mcpServers": {
"collectui": {
"command": "node",
"args": ["/path/to/collectui-mcp/dist/index.js"]
}
}
}Same shape as Cursor — it's a standard stdio MCP server:
{
"mcpServers": {
"collectui": {
"command": "node",
"args": ["/path/to/collectui-mcp/dist/index.js"]
}
}
}Path has spaces? Quote it in shell commands (
node "/Users/me/my folder/collectui-mcp/dist/index.js"). In JSON, no quoting needed beyond the normal string.
4. Use it
Restart your agent, then just talk to it normally:
Look at https://collectui.com/designs/ui-interaction-ui-design-inspiration and build me the second one
Analyse this and match the timing exactly:
<any collectui link>
Find me some dropdown animations on collectui and show me how the best one moves
Your agent calls the tools on its own. You don't need to name them.
What it accepts
Give it any of these:
A CollectUI category page —
https://collectui.com/designs/ui-interaction-ui-design-inspirationA designer's page —
https://collectui.com/designers/someoneThe trending page, or the homepage
A CollectUI post id —
ce63a499-08b0-4782-866c-f99d0b7adc5bThe original X/Twitter post URL
Any direct image, GIF, or video URL at all — this part works with no CollectUI involvement whatsoever
Point it at a listing and you get an index to choose from. Point it at one design and you get the full breakdown.
The tools
Tool | What it does |
| The main one. Link in, full design + motion brief out. |
| Search by keyword, category, designer, or feed. |
| The site's 215 categories, for when you want to browse by kind. |
| Pull exact frames at specific timestamps, once you know which moment matters. |
get_design_context takes a detail setting that controls cost:
| You get | Roughly |
| Measurements only, no images | 2.5k tokens |
| The above + 3 keyframes | 6k tokens |
| The above + 6 larger keyframes + a contact sheet | 12k tokens |
brief is genuinely enough most of the time — the timeline already tells the agent the durations, the easings, and the directions.
How it works
Finds the design. CollectUI's catalogue lives behind a public read-only endpoint — the same one the website's own JavaScript calls. See a note on that below.
Crops away the presentation. Designers frame their work on a big flat backdrop. That backdrop is detected and removed first. It matters more than it sounds: on one test post, skipping this step made the palette come back 94% beige, describing the mat instead of the UI.
Decodes once. Frames come out of ffmpeg as raw pixels at 64px wide, and everything is computed from that one pass. No image libraries, no temp files, no second decode.
Measures the motion. Frame-to-frame difference splits the timeline into holds and transitions. Each transition then gets:
an 8×5 grid showing where the change is concentrated
block matching to find which way things moved, and how far
overshoot detection, which is what separates a spring from an ease
its progress curve fitted against 14 standard easing curves, scored with R²
Picks frames worth seeing. At segment boundaries, motion peaks, and the middle of held states — never a uniform sample.
Measured vs. inferred
Worth being straight about, since your agent will act on this.
Measured from the file — timings, dimensions, colours, contrast ratios, crop box, displacement, loop detection. These are read off the pixels.
Inferred — easing names, spring constants, and element roles. These come from curve fitting and heuristics. They're strong starting points, not ground truth.
One real limitation: displacement uses whole-frame block matching, so it reports the dominant movement. If three elements move in different directions at once, they average out. Every brief says so, so the agent doesn't over-trust it.
A note on the data source
CollectUI has no public API. Its front-end reads from a Supabase endpoint using a read-only key that it ships to every browser that visits the site.
This project uses that same public endpoint — but it deliberately does not contain a copy of that key. It reads it at runtime from the live site bundle, exactly the way a browser does, and caches it locally. That way this repo never republishes someone else's credential, and nothing breaks if they rotate it.
It also caches every download, so re-analysing the same design doesn't re-fetch anything.
If CollectUI ever ships a real API, src/api.ts is the only file that needs to change — the analysis pipeline doesn't care where media comes from.
Please be reasonable with it. It's someone's site.
Development
npm run build # compile
npm run dev # compile on changeTwo scripts for poking at it directly:
node scripts/smoke.mjs <url-or-id> # run the full analysis, print the brief
node scripts/test-mcp.mjs # drive the server over stdio, like an agent wouldLayout of the code:
src/
index.ts MCP server + the four tools
api.ts resolving CollectUI links to posts
media.ts downloading and caching
ffmpeg.ts every ffmpeg/ffprobe call
pack.ts assembles the brief you actually read
analysis/
motion.ts segmentation, easing fitting, displacement
color.ts palette extraction, contrast
layout.ts bands, matte detection, content boxContributing
Issues and PRs welcome. Especially interested in:
better easing fits (spring parameter estimation is currently pretty rough)
per-region motion tracking, so multiple elements moving at once don't average out
text detection, so the brief can mention what the UI actually says
License
MIT — see LICENSE.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
UI design from prompts, screenshots, and URLs for AI coding agents and theme tokens.
Turn any live website into brand colors, fonts, design tokens, SVGs, Lottie and paste-ready code.
Focused full-screen UI references and hosted design materials for coding agents.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/rayhankhilji/collectui-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server