About Three.js DevTools MCP
Three.js DevTools MCP is an MCP server for inspecting and changing Three.js scenes through a browser, with support for vanilla Three.js and React Three Fiber. It separates temporary live previews from source-code changes and provides ready-to-use code for applying edits.
Key features
- 01Inspect scene objects, materials, shaders, and textures
- 02Preview scene changes live in the browser
- 03Generate code from pending changes
- 04Audit website rendering and performance
- 05Capture smooth video frame sequences
- 06Connect Playwright and Puppeteer workflows
Use cases
- 01Find why a model or object is not visible
- 02Preview material, lighting, or camera adjustments
- 03Turn scene experiments into source-code edits
- 04Check a Three.js site for rendering issues
- 05Record a scene clip for a promo
MCP support
The MCP server exposes tools for inspecting and editing Three.js scenes, auditing websites, capturing frames, and connecting browser automation. MCP clients can use these tools through the browser devtools bridge.
Configuration
Local server config is the same for every client. Copy it into your client’s MCP config file.
npx -y threejs-devtools-mcpDEV_PORTDev server port to proxy (auto-detected from package.json if not set)BRIDGE_PORTBridge proxy port (default: 9222)BROWSERSet to 'none' to disable auto-opening browserHEADLESSSet to 'true' for headless browser mode (CI)CHROME_PATHCustom Chrome/Edge executable pathLocal servers need a runtime on your machine (e.g. Node.js 18+). Config file locations differ by client; see your client’s docs.
Tools
51Saved tool list · updated 2w ago
| Parameter | Type | Required | Description |
|---|---|---|---|
| depth | number | No | Max tree depth (default: 3) |
| types | array | No | Filter by type: Mesh, Light, Group, etc. |
| compact | boolean | No | Compact text tree (default: true). Set false for full JSON with positions/geometry. |
| maxChildren | number | No | Max children per node (default: 15 compact, 100 JSON) |
Details
From the project READMEthreejs-devtools-mcp
MCP server for inspecting Three.js scenes in real time, trying changes live in the browser, and turning them into code. 69 tools cover objects, materials, shaders, textures, animation, performance and memory, plus website audits, video frame capture and Playwright helpers.
Zero changes to your project. Works with vanilla Three.js and React Three Fiber, on WebGLRenderer and WebGPURenderer.

Setup
1. Add the MCP server
Claude Code
claude mcp add threejs-devtools-mcp -- npx threejs-devtools-mcp
Claude Desktop
Add to claude_desktop_config.json:
{
"mcpServers": {
"threejs-devtools-mcp": {
"command": "npx",
"args": ["-y", "threejs-devtools-mcp"]
}
}
}
Cursor
Add to .cursor/mcp.json in your project:
{
"mcpServers": {
"threejs-devtools-mcp": {
"command": "npx",
"args": ["-y", "threejs-devtools-mcp"]
}
}
}
Or use the HTTP transport — see Cursor setup guide.
Windsurf
Add to ~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"threejs-devtools-mcp": {
"command": "npx",
"args": ["-y", "threejs-devtools-mcp"]
}
}
}
VS Code (Copilot)
Add to .vscode/mcp.json:
{
"servers": {
"threejs-devtools-mcp": {
"command": "npx",
"args": ["-y", "threejs-devtools-mcp"]
}
}
}
OpenCode
Add to opencode.json in your project:
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"threejs-devtools-mcp": {
"type": "local",
"command": ["npx", "-y", "threejs-devtools-mcp"],
"enabled": true
}
}
}
2. Start your dev server and open the browser
Start your Three.js dev server as usual (npm run dev). The MCP server auto-detects the port from package.json and opens a browser at localhost:9222 with the devtools bridge injected.
Keep the browser tab open. The MCP server talks to your scene through a WebSocket bridge. Close the tab = tools stop working.
3. Ask the AI about your scene
"show me the scene tree"
"why is my model invisible?"
"try the car in red" ← live preview, nothing saved
"keep it" ← written into your code
"audit this site for mobile"
"record a 5-second clip at 60 fps"
Look now vs. change the code
Every tool is labelled, so you and the AI always know what touches your files:
| Tools | Your code | |
|---|---|---|
| Inspect | scene_tree, material_details, web_audit, screenshots… | untouched |
| Live preview | set_material_property, set_light, set_camera… | untouched; lost on page reload |
| Debug visual | wireframe, bounding boxes, helpers, overlay | untouched; never needed in code |
| For code | pending_changes, gltf_to_r3f | the AI writes this into your source |
Every live-preview change is recorded. pending_changes returns each one as before → after with ready-to-paste code (vanilla Three.js and React Three Fiber) and where to find it in your project. revert_changes undoes them in the browser.
For websites and videos
web_audit: checks for a blurry canvas (pixel ratio, missing resize), battery drain (rendering while idle or off-screen), heavy textures (oversized, not KTX2), expensive shadows, wrong color space and too many draw calls. Each finding comes with the fix.capture_frames: records a frame sequence for promo clips and reels. Time is virtualised, so the output is perfectly smooth at 30/60 fps even if your scene renders slowly. You get theffmpegcommand for MP4/WebM.
Skills
Ready-made workflows show up as slash commands in Claude Code, Cursor and other clients: inspect-scene, try-look, apply-to-code, web-perf-audit, prepare-video, debug-invisible, playwright-setup.
Playwright & Puppeteer
Three ways to connect, same tools in all of them: your own browser (default), a Chrome launched by the server (HEADLESS / CDP_PORT, shareable with Playwright MCP), or your own tests:
import { attachDevtools, waitForScene, threeCall } from 'threejs-devtools-mcp/playwright';
await attachDevtools(context, { connect: false });
await page.goto('http://localhost:5173');
await waitForScene(page);
expect((await threeCall(page, 'object_details', { name: 'Car' })).visible).toBe(true);
See Browsers, Puppeteer & Playwright.
In-browser overlay
A built-in devtools panel with live performance stats, interactive scene graph, material editor, and 3D object preview. Activated automatically or via the toggle_overlay tool.

Tip: name your objects
Unnamed objects show as (unnamed) in the scene tree. Named objects are easier to find and modify:
// Three.js
mesh.name = "player";
// React Three Fiber
<mesh name="player" geometry={geometry} material={material} />
Documentation
- Tools reference — all 69 tools by mode, skills, parameters
- Browsers, Puppeteer & Playwright — connection modes, e2e tests, CI tips
- Advanced setup — animations, scene export, configuration, transports
- Cursor setup — step-by-step guide for Cursor
- Token-efficient workflow — best practices for saving context
License
MIT
Comments
New to MCP?
From what the protocol is to installing your first server, these answers cover most first questions.
An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.