frameshot
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., "@frameshotScreenshot this React button component"
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.
frameshot
Give your AI agent eyes. Render components with real Vite imports, Tailwind, and CSS Modules — right in your terminal or AI chat. No story files required.
Claude Code
claude mcp add frameshot -- npx frameshot-mcp@latest{
"mcpServers": {
"frameshot": {
"command": "npx",
"args": ["frameshot-mcp@latest"]
}
}
}Watch mode — live AI feedback loop
The AI edits a file, saves it, and immediately sees how it looks — without you calling anything.
watch_start({ patterns: ["src/components/Button.tsx"] })
→ renders on every save → call watch_get_latest("watch-1") to see itThe agent fixes → saves → sees → fixes again. You just watch.
Related MCP server: rendex-mcp
GitHub Action — free Chromatic alternative
Two lines. Auto-detects changed components. Posts before/after/diff screenshots directly in the PR comment.
- uses: actions/checkout@v7
with:
fetch-depth: 0
- uses: kamegoro/frameshot@v0.8.0Changed .tsx, .jsx, .vue, .svelte, .astro, .mdx files detected automatically. No Storybook. No signup. Free forever.
- uses: kamegoro/frameshot@v0.8.0
with:
paths: "./src/components/*.tsx" # default: auto-detect
extensions: ".jsx,.tsx,.vue" # default: .jsx,.tsx,.vue,.svelte,.astro,.mdx
exclude: "*.test.*,*.spec.*" # default: *.test.*,*.spec.*,*.stories.*Render any component
Point to a file. Get a screenshot. Full Vite pipeline.
render_file("src/components/Dashboard.tsx")Resolves your project's real imports, Tailwind config, CSS Modules, and path aliases — not a CDN polyfill.
Using with Claude
After installing, just describe what you want:
"Render src/components/PricingCard.tsx — does it look right?"
"Refactor the layout to CSS grid and show me before/after"
"Watch Button.tsx while I edit — tell me when something looks off"Claude calls render_file, diff_component, watch_start, or any other tool automatically.
Try it without an AI client
Works standalone on any React / Vue / Svelte project:
npx frameshot render src/components/Button.tsx
npx frameshot diff src/components/Header.tsx
npx frameshot catalog src/components/ --recursiveImages display inline in iTerm2, Kitty, and Sixel terminals. Saved to .frameshot/ by default.
First run installs Playwright's Chromium (~150MB). Subsequent renders are fast.
Tools
Tool | What it does |
| Render a file via Vite — real imports, Tailwind, CSS Modules |
| Pixel diff before/after — % changed, highlighted pixels |
| Watch files — auto-render on every save |
| Get the latest render from a watch session |
| Render every component in a directory at once |
| Screenshot any URL — localhost, staging, prod |
| Mobile + tablet + desktop in one call |
| Light + dark mode side by side |
| axe-core accessibility audit (WCAG violations) |
| Render a self-contained code snippet |
Tool | What it does |
| Render a project file with full Vite dependency resolution |
| Render a self-contained snippet → screenshot |
| Screenshot any URL with retry and network idle wait |
| Mobile + tablet + desktop in one call |
| Multiple prop/state variants at once |
| Light + dark mode side by side |
| Simulate click/hover/type, then screenshot |
| Multiple snippets in a labeled grid |
| Viewport × theme matrix in one call |
| Multi-frame CSS animation capture |
| Before/after pixel diff with % changed |
| Compare render against a reference image (Figma QA) |
| axe-core accessibility audit |
| DOM count, depth, render timing |
| Render all components in a directory |
| Save a render as named baseline |
| Compare current render against saved baseline |
| List all saved snapshots |
| Start watching files — renders on every save |
| Stop a watch session |
| Get the latest rendered screenshot from a session |
| List active watch sessions |
Performance
Scenario | Time |
Warm render (Vite server cached) | ~200–500ms |
CDN fallback (no Vite) | ~120ms |
Cold start (first render) | ~1–3s |
Subsequent renders (same session) | ~200ms |
Vite server is cached per project root. Browser pool stays warm between MCP calls.
vs. alternatives
Storybook | Chromatic | Browser MCP | frameshot | |
Setup | Stories + config | SaaS signup | Browser install |
|
Speed | Dev server startup | Cloud round-trip | 2–5s | ~200ms warm |
Cost | Free (labor cost) | $149–800+/mo | Free | Free forever |
Story files needed | Yes | Yes | No | No |
Real imports resolved | Via Storybook | Via Storybook | No | Via Vite |
Works offline | Yes | No | Yes | Yes |
Watch mode | No | No | No | Yes |
AI-native (MCP) | No | No | Full-page only | Component-level |
Development
git clone https://github.com/kamegoro/frameshot.git
cd frameshot && npm install
npx playwright install chromium
npm run build && npm testSee CONTRIBUTING.md for architecture details.
MIT © kamegoro
Maintenance
Latest Blog Posts
- 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/kamegoro/frameshot'
If you have feedback or need assistance with the MCP directory API, please join our Discord server