three.ws Scenes
io.github.nirholas/scene-mcp · 231 stars · JavaScript · Apache-2.0
MCP server Compose a placed 3D diorama from one sentence, export a forged world, browse saved scenes.
Install
The repo has no one-line install. Follow its README.
Published as
- npm
@three-ws/scene-mcpstdio
From the server's entry in the official MCP Registry.
Configuration
| Name | Set as | What it is |
|---|---|---|
THREE_WS_BASEOptional | Env var | Base URL of the three.ws API that serves /api/diorama. Override only when self-hosting or targeting a preview deployment. |
THREE_WS_TIMEOUT_MSOptional | Env var | Per-request timeout in milliseconds. compose_scene runs a server-side LLM chain, so the default is generous. |
Files
@three-ws/scene-mcp
Speak 3D worlds into being: turn one sentence into a placed diorama from any AI agent.
A Model Context Protocol server that gives any AI assistant the three.ws diorama pipeline over stdio. Describe a world in a sentence and
compose_scenereturns a placed plan (mood, palette, ground, and a set of single-object forge prompts), ready to build into an orbitable 3D scene.build_worldcollapses the whole pipeline (compose → forge every object → merge) into one call for agents with no browser to drive it.export_scenemerges an already-forged diorama into one glTF 2.0 binary (every object a named, selectable node, plus ground and mood-tuned lighting), ready to open in Scene Studio. Browse saved worlds withget_sceneandlist_scenes.
This is the companion to the three.ws avatar one-liner: avatars give you a character; scenes give you a world. No API key, no signer, no payment: every call hits the public /api/diorama endpoint.
Install
npm install @three-ws/scene-mcp
Or run with npx (no install):
npx @three-ws/scene-mcp
Quick start
Claude Code, one line:
claude mcp add scene -- npx -y @three-ws/scene-mcp
Claude Desktop / Cursor (claude_desktop_config.json or mcp.json):
{
"mcpServers": {
"scene": {
"command": "npx",
"args": ["-y", "@three-ws/scene-mcp"]
}
}
}
Inspect the surface with the MCP Inspector:
npx -y @modelcontextprotocol/inspector npx @three-ws/scene-mcp
Tools
| Tool | Type | What it does |
|---|---|---|
compose_scene |
generative | One sentence → a diorama plan: title, mood, palette, ground, and 2-8 placed single-object forge prompts. |
build_world |
generative | One sentence → a fully forged, exported 3D world in one call: compose → forge every object (free lane) → merge into one GLB. No browser needed; can take a couple of minutes. |
export_scene |
generative | Merge an already-forged diorama (objects with real glbUrls) into one glTF 2.0 binary (named, selectable nodes plus ground and mood-tuned lighting), ready for Scene Studio. |
get_scene |
read-only | Fetch a saved world by id (with GLB URLs) and its orbitable viewer URL. |
list_scenes |
read-only | Browse the recent or featured diorama gallery. |
compose_scene returns only the plan: no meshes are forged and nothing is saved. Forge each object via /api/forge, then either call export_scene yourself or POST /api/diorama {action:"save"} to mint a shareable permalink at https://three.ws/diorama?id=…. build_world does the compose-forge-export sequence for you in a single tool call. Both build_world and export_scene degrade gracefully on partial failure: objects that never forge are skipped and named in the response's skipped array; the rest of the world still exports.
Input parameters
compose_scene: prompt (required, 3-1024 chars: one sentence describing the world).
build_world: prompt (required, 3-1024 chars: one sentence describing the world).
export_scene: diorama (required: the diorama object returned by compose_scene/get_scene, with each object to include carrying status:"ready" and a real glbUrl).
get_scene: id (required: the diorama id returned at save time).
list_scenes: list (recent | featured, default recent), limit (1-50, default 24).
Example
// compose_scene
> { "prompt": "a lonely lighthouse on a stormy cliff at dusk" }
{
"ok": true,
"diorama": {
"title": "Beacon at Dusk",
"mood": "dusk",
"ground": "stone",
"island": "craggy",
"palette": { "sky": ["#2b2350", "#c76b4a"], "ground": "#5b5560", "fog": "#3a3550", "accent": "#ffb27a" },
"objects": [
{ "id": "obj-0", "label": "lighthouse", "prompt": "white-and-red striped stone lighthouse", "position": [0, 0, 0], "scale": 2.2, "rotationY": 0, "status": "pending", "glbUrl": null }
]
},
"object_count": 1,
"viewer_base": "https://three.ws/diorama"
}
// build_world: the whole pipeline in one call
> { "prompt": "a neon alley with a food cart and two streetlights" }
{
"ok": true,
"diorama": { "title": "Neon Alley", "mood": "night", /* ...forged objects with real glbUrl values... */ },
"object_count": 4,
"ready_count": 4,
"glb_url": "https://storage.googleapis.com/.../scene-neon-alley.glb",
"scene_studio_url": "https://three.ws/scene?model=https%3A%2F%2Fstorage.googleapis.com%2F...%2Fscene-neon-alley.glb",
"exported_count": 4,
"skipped": []
}
Requirements
- Node.js >= 20.
- Network access to
https://three.ws(or your ownTHREE_WS_BASE).
Environment variables
| Variable | Required | Default |
|---|---|---|
THREE_WS_BASE |
no | https://three.ws |
THREE_WS_TIMEOUT_MS |
no | 45000 |
Links
- Homepage: https://three.ws
- Changelog: https://three.ws/changelog
- Issues: https://github.com/nirholas/three.ws/issues
- License: Apache-2.0, see LICENSE
Part of the three.ws SDK suite: 3D AI agents, on-chain identity, and agent payments.
Website · Changelog · GitHub
Facts
- Kind
- MCP server
- Group
- Uncategorized
- Stars
- 231
- License
- Apache-2.0
- Language
- JavaScript
- Last push
- 2026-10-12
- Forks
- 63
- MCP Registry
- io.github.nirholas/scene-mcp
- Homepage
- three.ws
- Topics
- animation, avatar, gltf, llm, mcp, webgl, 3d-generation, ai-agents, digital-human, generative-ai, glb, image-to-3d, mcp-server, model-context-protocol, solana, text-to-3d, threejs, web-components, webxr, x402
- 1REAio.github.morluto/reaReverse engineer anything from your terminal or agent with one CLI and MCP server.125.3k
- 2com.browser-use/browser-usecom.browser-use/browser-useControl a real Chrome browser to complete any task: fill forms, extract data, book flights.117.7k
- 3World Monitorapp.worldmonitor/mcpLive markets, conflicts, country risk, chokepoints, energy, and China decision signals. 93 tools.88.3k
- 4Scrapling MCP Serverd4vinci/scrapling🕷️ An adaptive Web Scraping framework that handles everything from a single request to a full-scale crawl! Don't be shy, join here: https://discord.gg/EMgGbDceNQ and follow here for daily tips and tricks: https://x.com/Scraplingdev86.9k
- 5Everythingmodelcontextprotocol/serversThis MCP server attempts to exercise all the features of the MCP protocol. It is not intended to be a useful server, but rather a test server for builders of MCP clients. It implements prompts, tools, resources, sampling, and more to showcase MCP capabilities.85.8k
- 6Fetchmodelcontextprotocol/serversA Model Context Protocol server that provides web content fetching capabilities. This server enables LLMs to retrieve and process content from web pages, converting HTML to markdown for easier consumption.85.8k