threejs-devtools-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| scene_treeA | List all objects in the Three.js scene tree. Returns compact text tree by default (saves tokens). Set compact=false for full JSON. |
| object_detailsA | Get detailed info about a specific object by name, uuid, or path |
| material_listA | List all materials in the scene with type, color, transparency |
| material_detailsA | Get full properties of a material: color, maps, uniforms, defines |
| shader_sourceA | Get compiled vertex/fragment shader source and uniforms for a material |
| shader_listA | List all compiled shader programs with their material associations |
| texture_listA | List all textures: size, format, wrap, filter settings |
| texture_detailsB | Get detailed info about a specific texture |
| renderer_infoA | Get renderer stats: draw calls, triangles, memory, capabilities |
| set_material_propertyA | Set a material property (color, roughness, wireframe, etc.). IMPORTANT: This is a runtime-only preview (lost on reload). Before calling, ASK the user whether they want a runtime preview or a persistent code change. Runtime preview — lost on page reload. You MUST ask the user first: runtime preview only, or also update source code? |
| set_uniformA | Set a shader uniform value on a ShaderMaterial — runtime-only preview (lost on reload). ASK the user first: runtime preview or persistent code change? Runtime preview — lost on page reload. You MUST ask the user first: runtime preview only, or also update source code? |
| set_object_transformA | Set position, rotation, scale, or visibility of a scene object — runtime-only preview (lost on reload). ASK the user first: runtime preview or persistent code change? Runtime preview — lost on page reload. You MUST ask the user first: runtime preview only, or also update source code? |
| set_lightA | Modify light properties: color, intensity, position, shadows — runtime-only preview (lost on reload). ASK the user first: runtime preview or persistent code change? Runtime preview — lost on page reload. You MUST ask the user first: runtime preview only, or also update source code? |
| highlight_objectA | Highlight an object for debugging (wireframe or visibility toggle). Runtime only — for visual inspection, not persisted. Debug only — page reload will reset. No code changes needed. |
| run_jsA | Execute arbitrary JavaScript with access to scene, renderer, camera. Returns the result. Runtime only (lost on reload). If the code mutates scene state, ASK the user first: runtime preview or persistent code change? SHADER PATCHING RECIPE — when modifying materials via onBeforeCompile:
Debug only — page reload will reset. No code changes needed. |
| performance_snapshotA | Get detailed performance analysis: draw calls, triangles, instanced meshes, object counts by type |
| instanced_mesh_detailsA | Inspect an InstancedMesh: count, max instances, geometry, sample transforms, custom attributes, instance colors |
| set_instanced_meshA | Modify InstancedMesh properties: count, visibility, frustumCulled — runtime-only preview (lost on reload). ASK the user first: runtime preview or persistent code change? Runtime preview — lost on page reload. You MUST ask the user first: runtime preview only, or also update source code? |
| camera_detailsA | Get active camera properties: type, position, FOV, near/far, aspect |
| set_cameraA | Modify camera: position, rotation, FOV, near/far, zoom — runtime-only preview (lost on reload). ASK the user first: runtime preview or persistent code change? Runtime preview — lost on page reload. You MUST ask the user first: runtime preview only, or also update source code? |
| fog_detailsA | Get scene fog settings: type (Fog/FogExp2), color, near/far or density |
| set_fogA | Modify scene fog: color, near/far (Fog) or density (FogExp2), background color — runtime-only preview (lost on reload). ASK the user first: runtime preview or persistent code change? Runtime preview — lost on page reload. You MUST ask the user first: runtime preview only, or also update source code? |
| renderer_settingsB | Get renderer configuration: toneMapping, exposure, colorSpace, shadowMap, pixelRatio |
| set_rendererA | Modify renderer: toneMapping, exposure, colorSpace, shadows — runtime-only preview (lost on reload). ASK the user first: runtime preview or persistent code change? Runtime preview — lost on page reload. You MUST ask the user first: runtime preview only, or also update source code? |
| animation_detailsA | List all AnimationMixers, their actions, clips, weights, and playback state |
| set_animationA | Control animation: mixer timeScale, action play/stop/pause/weight. Runtime only — for testing. Runtime preview — lost on page reload. You MUST ask the user first: runtime preview only, or also update source code? |
| skeleton_detailsA | List all skeletons/bones from SkinnedMesh objects in the scene |
| geometry_detailsA | Inspect geometry: vertices, attributes, indices, bounding box, morph attributes |
| morph_targetsA | List all meshes with morph targets, their target names and current influence values |
| set_morph_targetA | Set morph target influence on a mesh — runtime-only preview (lost on reload). ASK the user first: runtime preview or persistent code change? Runtime preview — lost on page reload. You MUST ask the user first: runtime preview only, or also update source code? |
| raycastA | Cast a ray from camera through screen coordinates and return hit objects |
| layer_detailsA | Show camera layer mask and objects with non-default layer assignments |
| set_layersA | Set layers on an object or camera — runtime-only preview (lost on reload). ASK the user first: runtime preview or persistent code change? Runtime preview — lost on page reload. You MUST ask the user first: runtime preview only, or also update source code? |
| add_helperA | Add a visual debug helper to a scene object. Types: box, axes, skeleton, arrow, grid, polar_grid, camera, directional_light, spot_light, point_light, hemisphere_light, plane Debug only — page reload will reset. No code changes needed. |
| remove_helperA | Remove a previously added debug helper Debug only — page reload will reset. No code changes needed. |
| set_textureA | Modify texture properties: wrap, filter, anisotropy, repeat, offset, colorSpace — runtime-only preview (lost on reload). ASK the user first: runtime preview or persistent code change? Runtime preview — lost on page reload. You MUST ask the user first: runtime preview only, or also update source code? |
| shadow_detailsA | Inspect shadow maps: global settings, per-light shadow config (bias, mapSize, camera frustum), cast/receive objects |
| set_shadowA | Modify shadow settings — runtime-only preview (lost on reload). ASK the user first: runtime preview or persistent code change? Runtime preview — lost on page reload. You MUST ask the user first: runtime preview only, or also update source code? |
| scene_backgroundB | Inspect scene background, environment map (IBL), color management, backgroundBlurriness/Intensity |
| find_objectsA | Search scene objects by type, material, visibility, name pattern, or custom property. Returns matching objects with details. |
| memory_statsA | Detailed GPU memory analysis: geometry buffers, texture VRAM, instance data, top textures by size |
| dispose_checkA | Find potential memory leaks: orphaned geometries/textures not in scene but tracked by renderer, hidden objects with geometry |
| toggle_wireframeA | Toggle wireframe on all materials or a specific object. Runtime only — for visual debugging. Debug only — page reload will reset. No code changes needed. |
| bounding_boxesA | Show/hide axis-aligned bounding boxes for scene objects. Runtime only — for debugging frustum culling and object bounds. Debug only — page reload will reset. No code changes needed. |
| env_map_detailsA | Inspect environment maps: scene.environment, scene.background, per-material envMap, IBL settings |
| scene_diffA | Compare scene state over time. First call saves a snapshot, second call shows what changed (added/removed/modified objects, transforms, materials, lights). |
| postprocessing_listA | List post-processing passes from EffectComposer: render passes, shader passes, effects (bloom, SSAO, etc.) |
| console_captureA | Capture browser console output (log/warn/error). Returns last N messages. Call to check for runtime errors and warnings. |
| texture_previewA | Preview a specific texture as a PNG image. Use texture_list first to find names/UUIDs. |
| perf_monitorA | Record FPS and frame times for N seconds. Returns avg/min/max FPS, percentiles, spike and jank counts. |
| click_inspectA | Enable click-to-inspect mode. Cursor changes to crosshair — tell the user to click on an object in the 3D scene. Returns clicked object details. |
| scene_exportA | Export scene or specific object as GLB. Requires GLTFExporter in your app (see error message for setup). Saves to screenshots/ folder. |
| gltf_to_r3fA | Convert a GLTF/GLB file to a ready-to-use React Three Fiber component (like gltfjsx) |
| take_screenshotB | Capture a screenshot of the current Three.js scene |
| annotated_screenshotA | Screenshot with labeled object names overlaid at their screen positions. Shows [M]esh, [L]ight, [G]roup, [C]amera tags. Great for AI to understand scene layout visually. |
| toggle_overlayA | Toggle a lightweight scene inspector overlay in the browser. Shows real-time FPS, draw calls, triangles, object count, scene tree, materials, and lights. Click objects in the tree to highlight them with wireframe. Debug only — page reload will reset. Debug only — page reload will reset. No code changes needed. |
| overlay_selectedA | Get comprehensive details about the object currently selected in the overlay. Returns full material properties, geometry info, transforms, textures, uniforms, shadow settings — everything needed to understand and modify the object in code. The user must first select an object in the overlay by clicking on it. |
| bridge_statusA | Check bridge connection and proxy status |
| set_dev_portA | Change the local dev server port the proxy forwards to |
| set_dev_urlA | Connect to a remote Three.js app by URL for inspection and visual debugging. Source code changes are NOT possible in remote mode — only runtime/visual modifications. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 60 tools
Each tool targets a distinct aspect of Three.js development—scene hierarchy, geometry, materials, animations, performance, etc. Even similar tools like set_camera and set_light areclearly differentiated by their noun. Overlap is minimal (e.g., object_details vs overlay_selected serve different contexts).
All tool names follow a consistent verb_noun pattern in snake_case (e.g., add_helper, set_camera, scene_tree). Verbs are imperative and nouns specify the target, making the pattern predictable across the entire set.
With 60 tools, the surface is large but still scoped to Three.js devtools. However, many tools are runtime-only previews (set_* tools) and some debug helpers could be consolidated, making the count feel heavy for the core debugging purpose.
The tool set covers almost every common debugging and modification need: inspection of all objects, materials, textures, shaders, animations, performance, screenshots, export, and even gltf-to-r3f conversion. No obvious gaps for typical Three.js development workflows.