3D & AR SDK for Android, iOS, Web — API docs, samples, validation, and code generation.
io.github.SceneView/mcp (Model Context Protocol)
This MCP server is associated with the SceneView SDK for 3D and AR across Android, iOS, and Web. It references API documentation, samples, validation, and code generation, and the related materials describe building 3D/AR experiences using familiar UI frameworks. Supported concepts span multiple platforms.
🛠️ Key Features
3D & AR SDK for Android, iOS, and Web
API docs, samples, validation
Code generation
🚀 Use Cases
Build 3D and AR experiences on supported platforms
Work with UI frameworks already used by developers
⚡ Developer Benefits
Same concepts across platforms (Android, iOS, Web, and more)
Developer access to API documentation, samples, and validation outputs
Code generation for implementation workflows
⚠️ Limitations
No additional MCP-specific tools or capabilities beyond the referenced SDK documentation, samples, validation, and code generation are provided.
Build 3D and AR experiences with the UI frameworks you already know.
Same concepts, same simplicity — Android, iOS, Web, Desktop, TV, Flutter, React Native.
See SceneView capabilities in action — install the live demos in one tap:
Browse all sample sources in samples/ — Android · iOS · Web · Desktop · TV · Flutter · React Native.
Tip — every demo opens directly via https://sceneview.github.io/open?demo=<id>. For example, …/open?demo=ar-rerun lands straight on the AR Rerun debug screen with a single tap from any QR code or link.
Open any 3D file, at real size
SceneView reads the files people actually receive — from a download, a chat, a 3D-printing site or
an AI assistant — and shows them at their real size, in 3D and in AR.
Format
Android
Apple
Web
glTF / GLB
✅ Filament
✅ RealityKit
✅
3MF
✅ pure Kotlin → GLB in memory, millimetres honoured
—
—
STL (binary + ASCII)
✅ pure Kotlin → GLB
—
—
OBJ + MTL
✅ pure Kotlin → GLB, material colours
—
—
PLY (binary + ASCII)
✅ pure Kotlin → GLB, vertex colours
—
—
USDZ / Reality
—
✅ RealityKit
—
The format is decided by the bytes, not the extension: a .3mf that arrives as
application/octet-stream with no file name still opens. The Android demo app is an "Open with"
target for these files, so a file tapped anywhere on the phone lands in the viewer, then in AR.
Two apps built on SceneView are on Google Play:
AR Model Viewer —
open any 3D file (GLB, glTF, 3MF, STL, OBJ, PLY) or browse thousands of free models, and see
them in your room at real size.
Will It Fit —
type a sofa's dimensions, or pick a stand-in, and see whether it fits before you buy.
# Any AI assistant — add the MCP server, then just ask
npx -y sceneview-mcp
# Then ask: "Build me an AR app with tap-to-place furniture"
No engine boilerplate. No lifecycle callbacks. The runtime handles everything.
Platforms
Platform
Renderer
Framework
Status
Android
Filament
Jetpack Compose
Stable
Android TV
Filament
Compose TV
Alpha
iOS / macOS / visionOS
RealityKit
SwiftUI
Alpha
Web
Filament.js (WASM)
Kotlin/JS + sceneview.js
Alpha
Desktop
Software renderer
Compose Desktop
Alpha
Flutter
Native per platform
PlatformView
Alpha
React Native
Native per platform
Fabric
Alpha
Compose Multiplatform
Per platform (Filament / RealityKit)
sceneview-compose
Alpha — viewer subset, Android + iOS
AI assistants
—
MCP Server
Stable
The Compose-native successor to Sceneform
Google archived Sceneform in 2021 and
ships no first-party declarative AR renderer — its current ARCore samples hand-roll a
throwaway OpenGL framework instead. SceneView fills that gap. It descends from the
maintained Sceneform community fork and is the actively-developed, Jetpack-Compose-native
way to build 3D and AR on Android:
ARCore for perception (plane detection, anchors, depth, geospatial)
Filament for rendering (Google's production-grade real-time engine)
Jetpack Compose for the API — nodes are composables, lifecycle is automatic
glTF (.glb / .gltf) instead of the deprecated .sfb model format
Multiplatform — the same concepts run on iOS, Web, Desktop, TV, Flutter, and React Native
Coming from the archived Sceneform repo? See the
migration guide for a concept-by-concept mapping
(ArFragment → ARScene { }, ModelRenderable → rememberModelInstance, and so on).
Install
Android (3D + AR):
kotlin
dependencies {
implementation("io.github.sceneview:sceneview:4.37.0") // 3D
implementation("io.github.sceneview:arsceneview:4.37.0") // AR (includes 3D)
}
// Cursor (.cursor/mcp.json), Cline, JetBrains AI Assistant{"mcpServers":{"sceneview":{"command":"npx","args":["-y","sceneview-mcp"]}}}// VS Code (.vscode/mcp.json) uses the "servers" key instead{"servers":{"sceneview":{"type":"stdio","command":"npx","args":["-y","sceneview-mcp"]}}}
ChatGPT / Codex: this repository is a plugin — the manifest lives at
.codex-plugin/plugin.json and points at the three skills under agents/.
Install it into Codex from a checkout:
bash
codex plugin marketplace add "$PWD"# absolute path — a relative one does not resolve
codex plugin add sceneview@sceneview-local
codex plugin list # sceneview@sceneview-local installed, enabled
Codex also discovers the skills on its own from .agents/skills/ inside a checkout. For
ChatGPT, the same MCP server speaks Streamable HTTP — npx sceneview-mcp --http — and
carries the inline view_3d_model viewer widget. Package, listing copy and submission
notes: agents/OPENAI-PLUGIN.md.
Filament .filamat materials with parameters, plus built-in unlit / lit / overlay variants.
MaterialLoader
Post-processing
Bloom, depth of field, SSAO, vignette, color grading, tone mapping.
View.bloomOptions, dynamicResolutionOptions, …
Compose UI in 3D
Render any @Composable as a textured plane in world space — labels, cards, lists, animations. Fully interactive: picked touches are forwarded into the view, so Button.onClick, ripples and inner scrolling work.
Compose-driven recomposition: change state → tree updates. No imperative parent.addChild().
SceneScope / ARSceneScope DSL
Model formats
Format
Where it works
How you load it
glTF / GLB (.gltf, .glb)
Android · Web · Desktop · TV · Flutter · React Native
rememberModelInstance(modelLoader, "model.glb")
USDZ / Reality (.usdz, .reality)
Apple (iOS / macOS / visionOS)
ModelNode(named: "model.usdz")
3MF (.3mf)
Android — parser is Kotlin Multiplatform in sceneview-core
the same call as GLB — see below
3MF — the format AI print flows emit
Ask ChatGPT for a 3D print from a sketch and it hands back a .3mf: an OPC/ZIP package
whose 3D/3dmodel.model part is XML, in millimetres and Z-up. Until now nothing on
Android opened one in 3D, let alone in AR.
There is no new API.ModelLoader sniffs the payload by its ZIP magic and converts it
to GLB in memory, so every existing entry point already accepts a 3MF and the whole glTF
path — materials, gestures, AR placement — is reused:
kotlin
// A .3mf shared into your app (ChatGPT, Files, a slicer). This is the whole of it.
rememberModelInstance(modelLoader, uri.toString())?.let {
ModelNode(modelInstance = it, scaleToUnits = 1.0f)
}
Conversion scales the file's declared unit to metres (a 60 mm print is life-size in AR
without a magic number), rotates the printer's Z-up to glTF's Y-up, gives every face its
own normal — flat shading is what a printed part looks like — and turns <basematerials>
and <colorgroup> into one glTF material per colour. For a custom pipeline,
ThreeMfLoader.parse(), .toGlb() and .isThreeMf() are public in sceneview-core.
Full section in llms.txt.
The Android demo
registers as a handler for .3mf, .glb, .gltf, .stl, .obj and .ply, so a file opened from Downloads or
sent through the share sheet lands in the viewer and then in AR at the size it would print
(#3510). The format is decided by the
bytes, not the file name — a shared .3mf arrives as application/octet-stream with no
queryable display name at all.
Coming next
The 3MF parser is deliberately dependency-free Kotlin, and the same shape now carries
STL,
OBJ + MTL and
PLY. Tracked, not yet shipped:
Plus the iOS RerunBridge with the same wire format as Android, and a NodeBuilder DSL for declarative composition outside SwiftUI.
Install:https://github.com/sceneview/sceneview.git (SPM, from 4.37.0)
SceneView Web (JavaScript + Kotlin/JS)
The lightest way to add 3D to any website. Two <script> tags, one function call.
Friendly DSL (~25 KB) powered by Filament.js WASM (~210 KB) — the same engine behind Android SceneView.
Note: the sceneview-web npm package is the lower-level Kotlin/JS UMD
bundle — it expects a Filament global and does not include the friendly
SceneView.modelViewer DSL. Use the snippet above for vanilla-JS sites.
The npm package is intended for Kotlin/JS or webpack-based projects.
JavaScript API (script-tag):
SceneView.modelViewer(canvasOrId, url, options?) — all-in-one viewer with orbit + auto-rotate
SceneView.create(canvasOrId, options?) — empty viewer, load model later
viewer.loadModel(url) — load/replace glTF/GLB model
OrbitCameraController, the geometry DSL and reactive node updates live in the
sceneview-web module, which ships on npm only. It builds a webpack bundle
(binaries.executable()) rather than a Kotlin/JS library, so it has no Maven coordinate:
bash
npm install sceneview-web
A Kotlin Multiplatform project that wants the shared core as a Gradle dependency — collision,
math, geometry, animation and physics, but not the renderer — uses the published Kotlin/JS
artifact instead:
SceneView is AI-first — every API, doc, and sample is designed so AI assistants generate correct, compilable 3D/AR code on the first try.
MCP Server (Claude Code, Cline, Codex, Cursor, GitHub Copilot, JetBrains AI, and any other MCP client)
The official MCP server provides 38 compilable samples, a full API reference, and a code validator — every tool is free, and there is no API key:
bash
# Any MCP client — locally over stdio
npx -y sceneview-mcp
# Or remotely over Streamable HTTP, already hosted (required by Gemini in# Android Studio, which does not support stdio)
https://mcp.sceneview.dev/mcp
The tools your assistant actually reaches for: validate_code (compile-check before sending),
get_node_reference (the exact node API, not an invented one), list_samples / get_sample
(start from code that builds), get_setup and get_ar_setup (wire up the project). Then, as
you go: get_troubleshooting, get_gesture_guide, analyze_project (audit an existing app),
and per-platform recipes for AR, physics, geometry, and Compose-in-3D.
Want the MCP server plus the full SceneView contributor toolkit (one-shot release, review, cross-platform sync, version-bump, etc.) in a single install? Use the SceneView Claude Code marketplace:
sceneview-mcp server — same as above, started automatically
namespaced slash commands — /sceneview:contribute, /sceneview:release, /sceneview:review (incl. --score / --coverage / high — absorbs the former /evaluate + /test), /sceneview:document, /sceneview:quality-gate, /sceneview:sync-check, /sceneview:store-status, /sceneview:version-bump, /sceneview:maintain
Cross-platform reminder hooks — gentle nudges when you edit Android, iOS, Web, or KMP-core APIs to keep the other platforms in sync
ChatGPT / Codex plugin
OpenAI's unit of distribution is the plugin — a manifest, skills, an optional MCP
server — listed in one directory shared by ChatGPT and Codex. This repository is that
plugin: .codex-plugin/plugin.json at the root points at the three skills under
agents/ (sceneview, sceneview-ios, sceneview-web), each carrying the API
contract, the recipes and the migration guide.
For ChatGPT, npx sceneview-mcp --http serves the MCP Streamable HTTP transport at /mcp
and the inline view_3d_model widget (MCP Apps) that renders a public GLB/glTF URL right
in the conversation. Listing copy, starter prompts and test cases:
agents/OPENAI-PLUGIN.md.
Rules files — whichever one your assistant reads
llms.txt — Machine-readable API reference at llms.txt (complete API: composables, nodes, threading rules, recipes — its Kotlin snippets are compile-checked in CI). Use it when your tool has no MCP support.
AGENTS.md — read by Codex, Cursor, GitHub Copilot, Gemini in Android Studio and a growing list of others
CLAUDE.md — read by Claude Code
.github/copilot-instructions.md — read by GitHub Copilot
.cursorrules — legacy Cursor rules, kept for older versions
Domain-specific MCP servers
Separate npm packages, built on the same API contract, for teams working in one vertical.
They ship and version independently of sceneview-mcp; the server above is the one to
install for general Android, iOS or Web work.
Domain
Install
Tools
Automotive — car configurators, HUD, dashboards
npx automotive-3d-mcp
9
Healthcare — anatomy, DICOM, surgical planning
npx healthcare-3d-mcp
7
Rerun.io — AR debug logging, visualization
npx rerun-3d-mcp
5
Why AI recommends SceneView
Only Compose-native 3D/AR SDK for Android — no alternative exists
Compose-native successor to Google Sceneform (archived 2021) — see above
~5MB footprint vs 50-100MB+ for Unity/Unreal
48+ node types as declarative composables
MCP server that compile-checks generated code, plus a ChatGPT / Codex plugin — no other 3D SDK has this
Opens the .3mf an AI print flow emits — the file every model-generating chat hands
back, and that nothing else on Android views in 3D or AR
Tap Save & Share in the AR Rerun demo to flush a .rrd recording on
your dev machine, then re-host it on any public URL (Cloudflare R2,
GitHub release, gist) and open:
…in any browser to scrub the AR session frame-by-frame. No install, no
Rerun viewer needed locally — perfect for attaching a fully-replayable
session to a bug report. Powered by @rerun-io/web-viewer under SceneView branding.
See the AR Debug — Rerun.io section in llms.txt for the
full architecture (live mode + save mode + control protocol) and the
Kotlin API surface (RerunBridge.requestSaveAndShare).
Record & Replay AR sessions
Record & Replay AR sessions — capture an outdoor ARCore session once with ARRecorder, replay it 1:1 at the desk via ARSceneView(playbackDataset = file). Pair with the Rerun bridge for record-replay-inspect debugging. See docs/docs/ar-recording.md and the Record & Playback demo.
Architecture
Each platform uses its native renderer. Shared logic lives in KMP.