HomeGuidesChangelogDiscussions
Hire a ReactVision Expert 🛠️Launch Studio 🖥️Sponsor on GitHub ❤️Log In
Guides

MCP Server Tool Reference

The ViroReact MCP Server (https://mcp.reactvision.xyz/viro) is ReactVision's official Model Context Protocol server. It plugs live, accurate ViroReact knowledge straight into any MCP-capable coding agent — Claude, Claude Code, Codex, Cursor, Windsurf, and others — so the agent writes correct cross-platform XR code from current data instead of working from stale training. Under the hood it indexes the @reactvision/react-viro framework, its companion packages (@reactvision/react-viro-onnx behind ViroObjectDetector, and @reactvision/react-viro-face-tracking), the framework docs, and the real-world showcase AR examples, then exposes that knowledge through a set of purpose-built tools: component and prop schemas, curated platform and feature catalogues, scene generation and conversion, static validation and diagnostics, AI asset generation, an 8th Wall migration path, and a set of cloud tools that render scenes and code against real recorded environments. It is free to use with a Studio account (authenticate and pick the Team you want usage tracked against); paid Studio plans get higher usage limits, and the tools that generate assets or run against a recorded environment draw on the platform's AI credits.

The tools below are grouped by theme. Everything is free with a Studio account except the asset-generation tools and the cloud rendering tools, where the tier and credit cost are called out per tool.

Getting oriented and codebase intelligence

High-level entry points and raw navigation over the indexed ViroReact codebase and docs.

ToolDescription
reactviro_get_overviewHigh-level architecture report: which packages are indexed, which docs are available, and which tools to use to drill in. The place to start when exploring the MCP for the first time.
reactviro_get_treeReturns an ASCII directory tree of one package or all packages.
reactviro_list_filesLists files in the codebase, filterable by package, language, or path, with pagination.
reactviro_get_fileReturns the full source of any file in the project.
reactviro_searchFull-text search across the whole corpus (FTS5 with a regex fallback).
reactviro_find_symbolLocates a symbol (function, class, type, interface, const, or component) across the packages.
reactviro_statsFile counts and sizes broken down by package and language, plus the indexed-at metadata.
reactviro_get_docsReturns the indexed framework documentation (README, CHANGELOG, SHADER_REFERENCE, QUEST_SETUP, VISIONOS_SETUP, VPS_LITE, and more). Pass list=true to see everything available.
reactviro_changelog_sinceParses the indexed framework CHANGELOG and returns every entry from a given version onward. Useful for "what changed since I last upgraded" and migration prep.

Component API reference

The source of truth for what components exist and what they accept. Use these before generating or rendering a scene.

ToolDescription
reactviro_list_componentsLists all public ViroReact components, grouped by semantic category (AR, Geometry, Lighting, Materials, Animation, Effects, Portal, Media, Audio, UI, Navigation, Camera, Input, Environment, Transform, Studio, Panoramic / 360, 3D Objects, Other).
reactviro_list_categoriesReturns the catalogue of component categories with counts.
reactviro_get_componentReturns the full TypeScript source of a component.
reactviro_get_component_propsReturns the AST-extracted props schema for a component: name, type, optionality, JSDoc description, and @since tag.
reactviro_get_component_eventsReturns the event-handler props for a component (those following the onX naming pattern).
reactviro_list_propsInverse lookup: given a prop name or pattern, returns every component that declares it.
reactviro_list_event_handlersAggregates every on... event handler exposed across ViroReact components.

Reference catalogues

Curated lookups for the values that are easy to forget and hard to guess.

ToolDescription
reactviro_get_platform_matrixThe curated platform-support matrix for ViroReact features across iOS (ARKit), Android (ARCore), Meta Quest (OpenXR), and visionOS.
reactviro_get_shader_uniformsCatalogue of shaderModifiers entry points (Geometric, Vertex, Surface, LightingModel, Fragment), the pipeline stage each hooks into, and the uniforms available at each stage.
reactviro_list_lighting_modelsThe lightingModel options for ViroMaterials.createMaterials: PBR, Blinn, and the rest.
reactviro_list_animation_easingsThe easing curves accepted by ViroAnimations.registerAnimations.
reactviro_list_physics_body_typesThe physicsBody.type options: Static, Dynamic, Kinematic.

Examples

Real scenes from the showcase repo, for reference and pattern-matching.

ToolDescription
reactviro_list_examplesLists the real-world AR scene examples from the @reactvision/showcase repo (plane detection, custom shaders, AR portal, particle effects, depth-mesh collision, and more).
reactviro_get_exampleReturns the full TypeScript/TSX source of a given example scene.
reactviro_examples_usingGiven a component name, finds the example scenes that use it.

Scene generation and conversion

Produce new scenes, and move scenes between ReactViro TSX and the Studio scene format.

ToolDescription
reactviro_generate_sceneGenerates a ready-to-use ReactViro scene template from a fixed feature list (plane detection, image tracking, 3D model, particles, portal, lighting, materials, animations, physics, custom shader, 360 image, audio, text). It does not take a free-text description — pick the closest features and adapt the returned TSX. Pass target_platform and the response is prefixed with compatibility warnings for that platform.
reactviro_studio_to_tsxBest-effort conversion of a Studio scene response into a ReactViro TSX scene. Translates assets, materials, animations, and variables faithfully; anything it cannot map statically (Studio's visual-scripting layer, collision or proximity bindings) is listed in the warnings.
reactviro_tsx_to_studioBest-effort conversion the other way: a ReactViro TSX scene into a Studio scene skeleton.

Static validation and diagnostics

Lint, inspect, and troubleshoot scenes and assets locally, without spinning up the live engine. All free.

ToolDescription
reactviro_validate_sceneParses a TSX scene snippet, walks every Viro*/Studio* element, and validates each against the real component and prop schemas. A name-and-shape lint, not a full type checker.
reactviro_check_platform_supportWalks a TSX scene, identifies the platform-significant components and props, and reports unsupported combinations per platform (ios, android, quest, visionos).
reactviro_list_assets_neededScans a TSX scene snippet for static require('...') calls and returns the list of assets the scene depends on. Remote URLs and dynamic requires are reported separately.
reactviro_check_performance_budgetFetches one or more GLB/glTF model URLs, extracts triangle count and texture footprint with a lightweight parse, and flags anything over rough per-platform budgets (quest, mobile-ar, visionos, web — Quest being the tightest). GLB and glTF-JSON with embedded buffers only; VRX/FBX/OBJ report "unsupported format" rather than a wrong number. Rough guidance, not a hard performance guarantee.
reactviro_diagnose_errorMatches a runtime error message, exception, or crash log against curated known-issue entries and returns likely causes and fixes.
reactviro_find_native_bridgeGiven a JS-side prop, event, or method name, returns search hints for locating the matching native code in the reactvision-platform MCP (virocore C++, JNI bridge, iOS RCT bridges, SLAM). Does not call the native MCP itself.
reactviro_diff_imagesCompares two PNG images pixel-by-pixel and returns the percentage of differing pixels plus a visual diff. Typically used on two reactviro_render_scene screenshots for before-and-after regression checks. Does no rendering itself.

Account and Studio context

Tools tied to the connected Studio Team. Both free.

ToolDescription
reactviro_list_studio_contentLists the connected team's Studio projects (with their scenes and their environment library) and the team's shared assets. Call this first when rendering or generating assets: every cloud tool below takes its ids from here, so you never paste UUIDs out of Studio URLs.
reactviro_get_usageReports the team's ReactVision AI budget: credits used against the plan's limit, percentage consumed, and when it resets. Does not consume a credit, and works even when the team is over budget — so it is the tool to call when other calls are being blocked.

AI asset generation

Generate images and 3D models straight into the connected team's Studio asset library, ready to place in a scene. Available on every plan, including free, and charged to the team's monthly AI credit budget. Check the balance first with reactviro_get_usage.

ToolDescription
reactviro_generate_imageGenerates an image with Google Gemini and saves it to the team's asset library. Synchronous — the image is finished when the call returns, though it can take up to a minute. Three tiers: gemini-3.1-flash-lite-image (Nano Banana 2 Lite, 15 credits) for placeholders and throwaways; gemini-3.1-flash-image (Nano Banana 2, 25 credits) is the default and right for almost everything; gemini-3-pro-image (Nano Banana Pro, 49 credits) only when the image is the centrepiece of the scene. Returns the new asset's id and file URL.
reactviro_generate_3d_modelGenerates a GLB and saves it to the team's asset library. Asynchronous — it returns a task id and the model finishes in the background; poll reactviro_get_3d_model_task. Quality quick (Tripo, 70 credits) is the default: use it for fast iteration, simple geometry, background props and batches of secondary items. Reserve high_quality (Fal.ai Hunyuan3D, 125 credits) for the one or two hero assets a scene is built around. Image-to-3D is supported by passing image_url, which must be a ReactVision storage URL (typically one returned by reactviro_generate_image) and requires high_quality — quick mode is text-only.
reactviro_get_3d_model_taskReads one 3D generation task and finalises it once the provider has finished. Poll until status is completed or failed; on completion it returns the new asset's id and file URL, plus the finished model's triangle count, texture footprint, and any platform it is over budget for.

Check the size before you place it. Generated models are not capped, and a detailed prompt can come back over a million triangles — far past what a phone or headset will load. reactviro_get_3d_model_task reports the triangle count and flags the platforms the model is too big for; reactviro_check_performance_budget breaks the same numbers down per platform. An over-budget result is common and worth acting on.

Common failures across these three: out of AI budget, out of storage, a role without permission to create assets, or an image URL from outside ReactVision storage.

Migrating from 8th Wall

A two-step path for moving an exported 8th Wall project onto ReactVision. Migration itself is free — the only gates are the connected team's storage quota (for the extracted assets) and a 200 MB cap on the export zip.

ToolDescription
reactviro_create_8thwall_migrationStarts the migration of an 8th Wall "Buildable Code Export" zip. This call only reserves the migration and returns a signed upload URL — PUT the zip to it, then call reactviro_convert_8thwall_project. The bytes go straight to storage and never through the MCP server.
reactviro_convert_8thwall_projectConverts the uploaded export: verifies the zip, converts it inline, uploads the extracted assets and image targets into the team's library, and returns a ViroReact project scaffold (package.json, App.tsx, scenes/*.tsx) plus a migration report.

What converts, and what doesn't. Niantic Studio exports (an .expanse.json scene graph) get full scene conversion. A-Frame and three.js exports get their assets and image targets extracted plus a migration report. Everything without a faithful ViroReact mapping lands in the report or as a TODO comment in the generated code — nothing is invented.

After converting, validate each scene with reactviro_validate_scene and preview it with reactviro_render_scene (format: "tsx").

Cloud rendering (environment renders)

These tools reach ReactVision's live infrastructure. Reading and listing are free, and plain screenshot rendering is free on every plan. Anything that runs against a recorded session — an "environment": a video.mp4 plus an IMU/pose sidecar, captured in StudioGo or uploaded from Studio — requires a paid Studio plan and draws down the team's AI credits. Ids for every tool here come from reactviro_list_studio_content.

ToolDescription
reactviro_render_sceneFree, every plan. Runs a scene through the real WASM/WebGL2 web renderer in a headless browser as a free-running page (no real-world footage) and returns PNG screenshot(s) plus console output and warnings. Takes TSX (format: "tsx") or a Studio scene response (format: "studio_json"). Local require('./assets/...') calls are swapped for placeholder textures and models unless you pass assets with real URLs. Where the deployment has storage, frames are also saved for about an hour under saved_frames. For the same scene composited over a recorded session, use reactviro_preview_in_environment.
reactviro_preview_in_environmentPaid plan. Renders a scene inside one of the team's recorded AR sessions — the recording's frames as the camera background, its tracked poses as the camera — and returns an MP4 (plus a GIF with gif). Answers "did what I placed stay where I put it, in a real session." The output is an ephemeral preview, swept after about an hour; for a billed, persisted, Studio-visible run use reactviro_create_environment_render.
reactviro_create_environment_renderPaid plan. Queues an environment render of one Studio scene, or a set of the team's shared assets, inside an environment. Charged to the team's AI budget when queued and refunded automatically if the run fails. Give exactly one of scene_id or asset_ids.
reactviro_get_environment_renderFree. Reports one environment render's status, progress, what was rendered, and short-lived signed URLs for the input recording and rendered output.
reactviro_list_environment_rendersFree. Lists the team's environment renders, newest first, optionally narrowed to one project.
reactviro_create_code_environment_renderPaid flow (no charge yet). Reserves an environment render of local AR/3D source code inside an environment and returns a signed upload URL for the zipped bundle. Charges nothing on its own; the charge lands at reactviro_start_code_environment_render. One run renders one entry component inside one environment.
reactviro_start_code_environment_renderPaid. Queues the code environment render once its bundle has uploaded, charging the team's AI budget and handing the run to a worker. Safe to retry: the charge is claimed once.
reactviro_analyze_environmentPaid plan. Runs the tinyvio visual-inertial tracking engine over one environment recording and reports whether tracking held: anchor drift over time, dropouts, plane detection, scale, and reprojection error. Judges the recording itself, not a scene or code bundle.