loading…
Search for a command to run...
loading…
Enables AI agents to control and manipulate live 3D scenes across frameworks like Three.js, A-Frame, and Babylon.js using a comprehensive set of object and envi
Enables AI agents to control and manipulate live 3D scenes across frameworks like Three.js, A-Frame, and Babylon.js using a comprehensive set of object and environment tools. It features an integrated in-world chat system that allows for real-time scene modifications directly from within the 3D canvas.
The multi-framework 3D MCP server that actually works. Control live Three.js, A-Frame, Babylon.js, and React Three Fiber scenes from any MCP-capable AI — GitHub Copilot, Claude Desktop, Cursor, you name it — with in-world async chat so you can talk to the AI from inside the 3D canvas while it reshapes the world around you.
All four framework clients render matching, visually-aligned output from a single unified scene state. Same prompt, same scene, any engine.
~ to talk to the AI without leaving the 3D viewport; it reads your messages and answers in a floating overlaypnpm dev starts the server + all four clients simultaneously; auto-opens the Three.js client in your browsernpx maige-3d-mcp
This starts the MCP server via stdio. Point your MCP client (VS Code Copilot, Claude Desktop, Cursor) at the command npx maige-3d-mcp.
cd mcp-webgpu
pnpm install
cp .env.example .env
Add at least one API key. All variables:
| Variable | Default | Purpose |
|---|---|---|
WS_PORT |
8083 |
WebSocket bridge port |
CHAT_PROVIDER |
openai |
Active AI provider (openai | anthropic | google | mistral | groq | xai | cohere | together | ollama) |
OPENAI_API_KEY |
— | OpenAI |
ANTHROPIC_API_KEY |
— | Anthropic |
GOOGLE_API_KEY |
— | Google Gemini |
MISTRAL_API_KEY |
— | Mistral |
GROQ_API_KEY |
— | Groq |
XAI_API_KEY |
— | xAI / Grok |
COHERE_API_KEY |
— | Cohere |
TOGETHER_API_KEY |
— | Together.ai |
OLLAMA_BASE_URL |
http://localhost:11434 |
Local Ollama |
AUTO_OPEN_BROWSER |
true |
Open browser on startup |
DEFAULT_FRAMEWORK |
threejs |
Which client to auto-open (threejs | aframe | babylonjs | r3f) |
Each provider also has a *_MODEL env var (e.g. OPENAI_MODEL=gpt-4.1) — see .env.example for all available models.
Two chat modes:
- Relay mode (no key needed): the MCP host AI (Copilot, Claude Desktop) handles in-world chat by polling
getPendingUserMessages.- Direct mode (key in
.env): the server answers chat autonomously using the configured provider.
pnpm build:server # compile TypeScript once
pnpm dev # start server + all 4 clients
Clients open at:
| Framework | URL |
|---|---|
| Three.js | http://localhost:5173 |
| A-Frame | http://localhost:5174 |
| Babylon.js | http://localhost:5175 |
| React Three Fiber | http://localhost:5176 |
The .vscode/mcp.json is pre-configured. Reload VS Code and maige-3d-mcp appears in Copilot agent mode.
Alternatively, add to your global VS Code settings:
// .vscode/mcp.json (already included)
{
"servers": {
"maige-3d-mcp": {
"type": "stdio",
"command": "node",
"args": ["packages/server/build/main.js"],
"env": {
"OPENAI_API_KEY": "${env:OPENAI_API_KEY}",
"ANTHROPIC_API_KEY": "${env:ANTHROPIC_API_KEY}",
"GOOGLE_API_KEY": "${env:GOOGLE_API_KEY}"
}
}
}
}
| Provider | Default Model | Available Models | Notes |
|---|---|---|---|
| OpenAI | gpt-5.2 |
gpt-5.2, gpt-5.2-pro, gpt-4.1, gpt-4.1-mini, gpt-4o, o3, o4-mini | Best general-purpose option |
| Anthropic | claude-sonnet-4-6 |
claude-opus-4-6, claude-sonnet-4-6, claude-sonnet-4-5, claude-haiku-4-5 | Strong reasoning |
| Google Gemini | gemini-3.1-pro-preview |
gemini-3.1-pro-preview, gemini-2.5-pro, gemini-2.5-flash, gemini-2.5-flash-lite | Latest flagship, multimodal |
| Mistral | mistral-large-latest |
mistral-large, mistral-medium, mistral-small, open-mistral-nemo | Fast + capable |
| Groq | llama-3.3-70b-versatile |
llama-3.3-70b, deepseek-r1-distill-llama-70b, llama-3.1-8b-instant, mixtral-8x7b | Blazing inference speed |
| xAI / Grok | grok-4-0709 |
grok-4-0709, grok-4-fast-reasoning, grok-3, grok-3-mini, grok-code-fast-1 | Latest Grok 4 |
| Cohere | command-r-plus |
command-r-plus, command-r, command, command-light | Tool-use focused |
| Together.ai | DeepSeek-R1-Distill-Llama-70B-free |
DeepSeek-R1-Distill-70B-free, Llama-3.3-70B-free, Llama-3.3-70B, DeepSeek-R1, Qwen2.5-72B | Free tier available |
| Ollama | llama3.2 |
llama3.2, mistral, phi4, gemma3, qwen2.5, deepseek-r1 | Fully local, no API key |
Switch providers from the dropdown in the chat overlay or by changing CHAT_PROVIDER in .env. Override the model per-provider with *_MODEL env vars (see .env.example).
| Tool | Description |
|---|---|
createObject |
Add a mesh — box, sphere, cylinder, cone, torus, plane, capsule, or glTF model |
updateObject |
Partial update: position, rotation, scale, material (color, metalness, roughness, emissive), visibility |
deleteObject |
Remove by id |
cloneObject |
Duplicate with optional offset |
getObject |
Inspect a single object |
getSceneState |
Full scene JSON snapshot |
createLight · updateLight · deleteLight — ambient, directional, point, spot, hemisphere
setCamera · flyToObject
animateObject · stopAnimation — rotate, bounce, pulse, float, spin, custom keyframes. Animations persist in server state and replay automatically on page reload. Multiple properties animate concurrently per object.
setEnvironment — background color, fog, tone mapping, exposure, shadow toggle
clearScene · loadScene · exportScene · undo · redo · takeScreenshot
| Tool | Description |
|---|---|
getPendingUserMessages |
Retrieve messages typed from inside the 3D canvas |
sendChatMessage |
Display AI reply in the floating overlay |
clearPendingMessages |
Flush the queue |
| URI | Description |
|---|---|
maige-3d://scene/state |
Live JSON snapshot of all objects, lights, camera, and environment |
maige-3d://server/sessions |
List of currently connected browser sessions (id, framework, timestamp) |
| Prompt | Description |
|---|---|
3d-world-assistant |
Full system context for AI assistants — scene tools, chat workflow, incremental update rules, 10+ advanced demo recipes (galaxy, DNA helix, neon tunnel, crystal cluster, etc.) |
framework-guide |
Per-framework geometry/material/lighting tips. Accepts framework argument: threejs, aframe, babylonjs, r3f |
demo-showcase |
NEW: Instant access to 10+ stunning pre-built demo templates. Perfect for quick impressive visualizations. Accepts style argument: galaxy, dna, tunnel, crystals, geometries, wave, spiral, orbit, explosion, all |
All four clients support immersive VR via WebXR. Click the 🥽 Enter VR button (bottom-left) to start a session.
| Framework | Implementation |
|---|---|
| Three.js | Custom VRSetup.ts — WebXR session management, controller ray casters, VRChatPanel.ts canvas-texture chat panel |
| A-Frame | Native vr-mode-ui + laser-controls, 3D chat entity with dynamic text |
| Babylon.js | WebXRDefaultExperience + DynamicTexture chat panel |
| React Three Fiber | @react-three/xr v6 (createXRStore + <XR> wrapper), React VR chat panel component |
In VR, the chat panel floats in front of you and follows your gaze. AI replies appear in real-time so you can direct the scene from inside the headset.
Requires a WebXR-capable browser (Chrome 79+, Edge 79+, Meta Quest Browser) and a VR headset or the WebXR API Emulator extension for desktop testing.
Press ~ (backtick) or click AI Chat in the bottom-right corner. Type a message, hit Enter, and the AI receives it, acts on it, and replies — all without leaving the 3D viewport. The chat overlay also includes:
┌─────────────────────────┐
│ MCP Host (Copilot, │ stdio / JSON-RPC
│ Claude, Cursor, etc.) │◄────────────────────┐
└─────────────────────────┘ │
│
┌──────────────────┴──────────────────┐
│ MCP Server (Node.js) │
│ │
│ tools/ ─ 23 tool definitions │
│ state/ ─ SceneStateManager + Undo │
│ chat/ ─ ChatRelay (9 providers) │
│ ws/ ─ WebSocket bridge :8083 │
│ └── adapters/ (per-framework) │
└──────────┬───────────────────────────┘
│ WebSocket
┌────────────────┬───────────────┼───────────────┬────────────────┐
▼ ▼ ▼ ▼ │
┌──────────────┐ ┌──────────────┐ ┌───────────────┐ ┌──────────────┐ │
│ Three.js │ │ A-Frame │ │ Babylon.js │ │ R3F / React │ │
│ :5173 │ │ :5174 │ │ :5175 │ │ :5176 │ │
│ ┌──────────┐ │ │ ┌──────────┐ │ │ ┌──────────┐ │ │ ┌──────────┐ │ │
│ │VR/WebXR │ │ │ │VR/WebXR │ │ │ │VR/WebXR │ │ │ │VR/WebXR │ │ │
│ │ChatPanel │ │ │ │ChatPanel │ │ │ │ChatPanel │ │ │ │ChatPanel │ │ │
│ └──────────┘ │ │ └──────────┘ │ │ └──────────┘ │ │ └──────────┘ │ │
└──────────────┘ └──────────────┘ └───────────────┘ └──────────────┘
Each client connects via WebSocket to the same MCP server. The server maintains a single canonical scene state and pushes commands through per-framework adapters that translate Vec3 formats, material models, and geometry names into each engine's native representation.
Key server features:
mcp-webgpu/
├── .env.example ← all env vars + model lists documented
├── .vscode/mcp.json ← pre-configured for VS Code Copilot agent mode
├── package.json ← pnpm workspace root
├── PLAN.md ← full architecture plan
├── packages/
│ ├── server/ ← MCP server (TypeScript / Node)
│ │ └── src/
│ │ ├── main.ts ← entry + .env discovery
│ │ ├── types.ts ← shared types
│ │ ├── tools/ ← 23 MCP tool definitions
│ │ ├── handlers/ ← tool / prompt / resource handlers
│ │ ├── state/ ← SceneStateManager + UndoStack
│ │ ├── chat/ ← ChatRelay (9 providers) + MessageQueue
│ │ └── ws/ ← WebSocket server + framework adapters
│ │ └── adapters/ ← ThreeAdapter, AFrameAdapter,
│ │ BabylonAdapter, R3FAdapter
│ ├── client-threejs/ ← Three.js (Vite)
│ │ └── src/
│ │ ├── scene.ts ← SceneManager
│ │ ├── commands/ ← command dispatcher
│ │ ├── overlay/ ← ChatOverlay UI
│ │ └── vr/ ← VRSetup + VRChatPanel (WebXR)
│ ├── client-aframe/ ← A-Frame 1.7.0 + bloom (Vite)
│ │ └── src/
│ │ ├── scene.ts ← A-Frame SceneManager
│ │ ├── commands/ ← command dispatcher
│ │ └── overlay/ ← ChatOverlay UI
│ ├── client-babylonjs/ ← Babylon.js + PBR (Vite)
│ │ └── src/
│ │ ├── scene.ts ← Babylon SceneManager
│ │ ├── commands/ ← command dispatcher
│ │ └── overlay/ ← ChatOverlay UI
│ └── client-r3f/ ← React Three Fiber + Zustand (Vite)
│ └── src/
│ ├── App.tsx ← React app shell
│ ├── SceneCanvas.tsx ← R3F canvas + XR wrapper
│ ├── store/ ← Zustand scene store
│ ├── commands/ ← command dispatcher
│ ├── overlay/ ← ChatOverlay UI
│ └── vr/ ← VRChatPanel (React XR component)
MIT
Добавь это в claude_desktop_config.json и перезапусти Claude Desktop.
{
"mcpServers": {
"maige-3d-mcp": {
"command": "npx",
"args": []
}
}
}