R3

org.r3js/r3

Build 3D web apps: physics, audio, music, Blender import. Live edits, undo, versions, publishing.

Yes, your AI can use this right now.Answered a live MCP handshake in 1405 ms with no sign-in needed and exposes 59 tools.

Connect it

Settings → Connectors → Add custom connector
URL: https://mcp.r3js.org/mcp

59 tools, verified live

Pulled straight from the server with tools/list on 2026-10-17.
r3_docs_listread-only

Every R3 document this server can give you, IN THE ORDER TO READ THEM, with what each one covers and how big it is. Start here: no model has R3 in its pretraining, and code written from tool descriptions alone saves cleanly and then silently does nothing. Read one with r3_docs_read.

r3_docs_readread-only

Return one R3 document in full, or one API symbol. Paths come from r3_docs_list: r3_docs_read("CODE_PATTERNS.md") how a Code component is written — read this first r3_docs_read("PHYSICS_USAGE.md") colliders, rigid bodies, joints r3_docs_read("api") index of every component, system and event r3_docs_read("api/component/Mesh") one component r3

r3_whoamiread-only

Report the R3 account you act for, how you are connected (an agent key, or an app connection made with Sign in with R3), what you are allowed to do, and whether the R3 platform is reachable. Call this first: it verifies your credential end to end and tells you which capabilities you have before you attempt any other tool.

r3_project_create

Create a new R3 project and save it to the user's account. Produces a complete, openable project — scene, world, camera, renderer, lighting, audio listener and music transport — ready for components to be added. Pass `template` for a phone project (mobile-portrait / mobile-landscape) that fills the screen when published. Returns the project id, which every other project tool takes. Call r3_whoami

r3_project_listread-only

List the projects this R3 account can work on — its own and its teams' — last updated first, with the projectId every other project tool takes. Start here whenever the user names a project ("my slot machine") rather than giving an id: search for it, then pass its projectId to r3_project_load. Search by name rather than paging: search: "slot" is matched (case-insensitively, anywhere in the name) a

r3_project_loadread-only

List the components in an existing R3 project — what it contains and, for each one, its entityRef: the name code addresses it by (`this['mesh_cube_1']`). Read this before writing any code for a project, and after any tool call whose outcome was reported as unknown, to see what actually landed. Value components (Vector3, Color, Scalar) are not listed individually — reach them through their owner, e

r3_preview_createcan modify

Create a shareable preview link for a saved R3 project, so a person can open it in a browser and see it running. The link is valid for 24 hours and does NOT make the project public. Use this to show the user what you built. Takes the projectId returned by r3_project_create. When an R3 tab has the project open, the project's picture (its card and the link's image) is refreshed from that tab.

r3_preview_removecan modify

Remove the preview link of an R3 project: every preview link to it stops working at once (teammates' too). Only when the user asked for it, or on your own when the preview link is what blocks an r3_project_delete you were asked to do: a preview link is temporary, so you may remove it then, and you must tell the user you did. A live project stays live; a project that was only previewed is no longer

r3_publish_livecan modify

Publish an R3 project live: makes a RELEASE (a frozen copy) of the project as it is now and makes it the one its public live URL shows, for anyone. Only when the user asked for it. Changing the project does NOT change the live site; r3_publish_live does: on a project that is already live this is a publish update (a new release replaces the live one), and the answer names the release number and wha

r3_unpublish_livecan modify

Take a live R3 project offline: its public live URL stops working at once, and the live-project slot it used on the plan is free again. Only when the user asked for it. Other people open a live project, so when it blocks an r3_project_delete, ask the user first: never take it offline on your own to unblock a delete. Deletes nothing: the project, and any preview link, stay; r3_publish_live makes it

r3_release_listread-only

List the releases of an R3 project, newest first: number, date, who made it, note, size, which one is LIVE (what the public URL shows), pinned, and releases in the trash (restorable for 7 days). Also says whether the project has saved changes that are not live yet: saving does NOT change the live site; r3_publish_live does. Read-only. Needs the project:read right.

r3_release_rollbackcan modify

Make an earlier release of a live R3 project the one its public URL shows again (rollback, or forward again). Only when the user asked for it. The project must be live; this never uses a plan slot. A release in the trash or one marked incomplete is refused. Nothing is deleted: the release that was live stays in the list. Take the number from r3_release_list. Needs the publish:live right.

r3_publish_settings_readread-only

Read the publish settings of one of the user's own R3 projects in this environment — what the app's Deploy → Settings shows: Works on (keyboard / touch / both / not tested), the SEO title and description that search engines and link previews show, how the live page starts (Start button, first click, on load), its controls and badge, and what Save does for a live project. Also answers a SUGGESTION

r3_publish_settings_setcan modify

Change publish settings of one of the user's own R3 projects in this environment — the app's Deploy → Settings. Only the settings named change (the rest stay as they are). Only when the user asked for it, or approved the text: these settings shape the PUBLIC live page — its title and description in search results and link previews (seoTitle, seoDescription), Works on (keyboard puts a "made for a k

r3_project_renamecan modify

Rename a project: the name shown in the user's project list, the editor's title and the live page. The same change as clicking the title in the R3 editor, kept at once in the project's live copy (every open R3 tab shows it). The public address does not change: a preview or live link keeps working. Scripts are not affected (they never address the project by name). Renaming a COMPONENT is not this

r3_project_deletecan modify

Permanently delete an R3 project. With the project:delete:created capability, only a project THIS agent key created — use it to clean up your own abandoned attempts; the user's own projects and other keys' are refused. With project:delete:owned, any project the user owns, and only when the user asked for it. A published project (live, or with an open preview link) is refused: it must be taken offl

r3_factory_listread-only

List the R3 factories available to r3_factory_run, with each one's options, types and defaults. A factory builds a complete, correctly-wired object — a cube is a mesh plus geometry plus material plus colour, already connected. Call this before r3_factory_run if you are unsure of a factory name or its options.

r3_factory_run

Add an object to an existing R3 project — a cube, sphere, terrain, lighting, a physics body, and so on. Each factory builds a complete, correctly-wired object (mesh + geometry + material + colour, already connected), so you never assemble components by hand. Kept at once in the project's live copy: every R3 tab with the project open shows it now, no editor needed and nothing to save (r3_editor_cre

r3_code_writecan modify

Add or replace a Code component — JavaScript that runs in the browser and makes a project DO something (spin a mesh, respond to keys, drive physics). Kept at once in the project's live copy: every R3 tab with the project open gets the new code now, no editor needed and nothing to save (r3_editor_code is the same tool). The answer says what was kept, its seq and the new codeVersion. Call r3_projec

r3_code_readread-only

Read back what a Code component actually contains — its full JavaScript source and the event it runs on. r3_code_write reports what it wrote; this reports what is there. Use it before replacing a script, so an edit builds on the real source instead of overwriting it blind, and after a write whose reply you did not see, to confirm what landed. Call it with NO entityRefs to get every Code component

r3_help_writecan modify

Set the instructions that ship WITH a project — controls, what to press, what it does. R3 renders them in a modal behind a floating "?" button and the H key, in the editor and in the live portal alike, so whoever opens your preview link can read them. This is the built-in surface for that; do not build your own overlay in a Code component. The body is markdown — headings, bullets, `code`, links.

r3_component_setcan modify

Set one or more properties on a component that already exists in a project — a material's roughness, a mesh's position, which material a mesh uses. Kept at once in the project's live copy: every R3 tab with the project open shows it now, no editor needed and nothing to save (r3_editor_set is the same tool). The answer says what was kept and its seq. Call r3_project_load FIRST: components are addr

r3_component_readread-only

Read back what components actually hold — a material's colour and roughness, a mesh's position, which material it uses. r3_project_load gives you the names; this gives you the values behind them. Pass SEVERAL entityRefs in one call — telling six similarly-named materials apart is the case this exists for, and it is one round trip rather than six. What comes back is exactly what r3_component_set

r3_terrain_heightread-only

How high the ground of a heightfield terrain is at the world (x, z) positions you ask, exactly as physics and the drawn terrain have it, plus the terrain's lowest and highest point, centre, size and footprint. Use it to place something ON a terrain: an object stands on the ground at (x, z) when its lowest point is at the returned y (a vehicle: its wheels' bottom); the returned ground normal says h

r3_component_add

Add one component of ANY registered type — a collider, a rigid body, a joint, a light, a material, a geometry … — to a saved R3 project, with its values and references set before it is created. Kept at once in the project's live copy: every R3 tab with the project open shows it now, no editor needed and nothing to save (r3_editor_add_component is the same tool). Use r3_factory_run for a ready-made

r3_editor_openread-only

Open a project in the R3 editor the user has open in their browser (their most recently used R3 tab) and focus it, so they see it. A project already open there is just focused (never reloaded). Use it to show the user the project you are working on, or before r3_editor_inspect. The same access rules as opening it by hand: the user's own projects, their teams', and public ones. The editor holds up

r3_editor_inspectread-only

Read what components hold RIGHT NOW in an R3 tab that has the project open: runtime values included — a moving body's position while the project runs. Use it to debug live behaviour. It needs a tab with the project open (with none, open it in R3 first: r3_editor_open). r3_component_read reads the kept values without a tab. Select with any of: `ids` (component ids from r3_project_load), `type` ("M

r3_editor_setcan modify

The same tool as r3_component_set (this is its older name): change properties of a component, kept at once in the project's live copy: every R3 tab with the project open shows it now, no editor needed and nothing to save. Name the component with componentId or entityRef. `values` take r3_component_set's shapes: a plain value {"roughness": 0.25}; a value component as an object of the keys to chang

r3_editor_codecan modify

The same tool as r3_code_write (this is its older name): replace a Code component's code, kept at once in the project's live copy: every R3 tab with the project open runs the new code now, no editor needed and nothing to save. Name it with componentId or entityRef and pass baseVersion, the codeVersion r3_code_read answered: code is never merged, so on an older version it is refused with the curren

r3_editor_create

The same tool as r3_factory_run (this is its older name): add an object — a cube, sphere, light, physics body … — kept at once in the project's live copy: every R3 tab with the project open shows it now, no editor needed and nothing to save. r3_factory_list lists the factories and their params.

r3_editor_add_component

The same tool as r3_component_add (this is its older name): add one component of ANY registered type — a collider, a rigid body, a joint, a light, a material, a geometry … — with its values and references set before it is created, kept at once in the project's live copy: every R3 tab with the project open shows it now, no editor needed and nothing to save. Use r3_editor_create for a ready-made obj

r3_editor_deletecan modify

Delete components from the project the user has OPEN in their R3 editor, exactly as the editor's delete dialog asks it — in TWO calls. First call WITHOUT `confirm`: it returns the plan and changes nothing — the selected components, what only they use (their geometry, material, colliders …), an Entity's members, the modes on offer and a planToken. Then call again with the same componentIds and conf

r3_editor_savecan modify

Save a VERSION of a project, like the editor's Save version (Ctrl+S): a named, frozen copy of the project as it is now (a release that does NOT go live). Nothing needs saving to be kept — every change is kept as it is made — so make a version only when the user asks for one (or at a milestone you tell them about). `name` is the version's name ("before the physics rework"). Nothing changed since th

r3_editor_undocan modify

Undo the last change YOU (this agent key) made to a project: everything one of your tool calls changed is undone together, and the user sees it at once in any R3 tab that has the project open. Use it when your own change was wrong or the user asks you to take it back. It never undoes the user's changes or another agent's: only this key's. `count` undoes your last few changes, newest first. If som

r3_release_restorecan modify

Put a project's working copy back the way one of its releases (saved versions) had it: components added since are removed, removed ones come back, values and scripts go back to that version (each script as a new version on top of the current one), and the name. The user sees it at once in any R3 tab that has the project open. Only when the user asked for it. Two steps: call it WITHOUT planToken f

r3_editor_run

Press the Run buttons of the user's open R3 editor: start physics, code, audio and music (all of them, or the ones named in `systems`), exactly as the user's own click does — a paused simulation resumes. Use it to TEST what you built: run it, then look with r3_editor_capture and read live values with r3_editor_inspect. Changes nothing saved. The systems serve every project open in that editor tab.

r3_editor_stop

Press the Stop buttons of the user's open R3 editor: stop physics, code, audio and music (all of them, or the ones named in `systems`), exactly as the user's own click does. Stopping physics puts every body back where it was placed. Changes nothing saved. Needs the editor:run right.

r3_editor_captureread-only

Capture the canvas of a project open in the user's R3 editor — the scene as its camera sees it NOW, running physics included — and LOOK at it: the answer is an image. Call it after a visual change (r3_editor_set, r3_editor_create, r3_editor_code …) to check what you built, and after r3_editor_run to see it move. At most 1280 px each way (`width`, default 1024); a JPEG. Needs project:read.

r3_editor_set_preview_imagecan modify

Use what the project's camera shows NOW, in the user's open R3 editor, as the project's picture: the image on its Projects card and on its preview link. The editor waits until the scene's textures have loaded and takes it without edit aids (no grid, gizmos or outlines), as a visitor sees it; the answer is the picture it set. Call it once the project looks right (r3_editor_capture first to check),

r3_blender_listread-only

List the Blender models this R3 account has uploaded — one per .blend file name, the current version of each — with what it will produce: how many Blender objects land in the scene, how many meshes and materials, its screenshot, and any PENDING update (a re-upload that changes meshes the user's projects use, waiting for r3_blender_update). An upload with unapplied modifiers is applied in Blender b

r3_blender_import

Add a Blender model the account has uploaded (its current version) to an existing R3 project — the whole model, or only the meshes you name. Every Blender object becomes an R3 Mesh keeping its own position, rotation, scale and origin, with its geometry, materials and textures wired up; objects sharing one mesh share one geometry. Reports each object's entityRef so you can reach it with r3_componen

r3_blender_updatecan modify

A re-uploaded Blender model is always its latest version; the user's projects keep the meshes they have until asked. This tool asks and answers that one question: choice update_projects without reportId shows which projects and entity templates use an older version (or an earlier import of the same file) and what changed; with the reportId and the projectIds / entityTemplateIds the user chose, it

r3_blender_upload

Save a .blend you made or changed (in Blender, through a Blender MCP) as the newest version of one of the user's Blender models: the model is named by the file name, so "monster-truck.blend" adds a version to the user's monster-truck model, or makes the model. A tool argument cannot carry the file, so this answers a one-time upload ticket (5 minutes) and the upload endpoint: its URL, method, Autho

r3_blender_downloadread-only

Get a .blend of one of the user's OWN Blender models (from r3_blender_list) to open in Blender: the current version, or the version fileId names. Answers a one-time download ticket (5 minutes) and the download endpoint (URL, method, Authorization header); the response body is the file. When the current version is the copy R3 made by applying modifiers, the answer says so and names the original upl

r3_blender_draft_push

While you build a model in Blender for the user, push an APPLIED copy of your working .blend after each step (body done, wheels done, materials done): the user's Blender page shows it as a 3D preview they can orbit. A draft is not a saved version: one draft per user, the newest wins, kept 24 hours. Answers a one-time ticket (5 minutes) and the draft endpoint (URL, method, Authorization header; the

r3_image_listread-only

List the images this R3 account owns, with the URL to use for each one. That URL is exactly what R3ComponentTexture.url takes, so this is how you find the account's own artwork — a wood grain, a logo, a skybox — and then point a texture at it with r3_component_set. Search by name rather than paging: search: "wood" is matched against every image on the account by the server, not against the page y

r3_audio_listread-only

List the audio files this R3 account owns, with the URL to use for each one. That URL is exactly what R3ComponentAudio.url takes, so this is how you find a sound the account already has — a footstep, a drum hit, a music bed — and then point an Audio component at it with r3_component_set. Search by name rather than paging: search: "kick" is matched against every audio file on the account by the se

r3_image_create

Store a small image YOU generated in this R3 account's image library and get back the URL for it — the value R3ComponentTexture.url takes. This is how you make a checkerboard, a gradient, a test grid or a noise tile and then actually put it on something with r3_component_set. Pass the image as a base64 data URL (data:image/png;base64,…), up to 1MB decoded. PNG, JPEG, GIF and WebP are stored; PNG

r3_texture_createcan modify

Make a matching, seamlessly tiling texture SET for a material: a colour map, a normal map and a packed ambient-occlusion / roughness / metalness map, rendered by R3 from a procedural recipe (seeded noise, stones, bricks …). Nothing is uploaded and it is free. The maps are stored as images in the account (the owner sees them in the Images browser as "<name> · albedo.png" …). Start from a preset (g

r3_texture_readread-only

Read one texture set: its name, size, tile size, the three map urls, the numbers its render measured, the sets it was edited from, and the full RECIPE (the editable source). The account's own sets, or anyone's public one. Change a recipe and make a new set with r3_texture_create {recipe}.

r3_texture_applycan modify

Wire a texture set to a material in a project: the colour map to `map`, the normal map to `normalMap`, the ambient-occlusion / roughness / metalness map to `aoMap` + `roughnessMap` (+ `metalnessMap` when the set is metallic), the SAME repeat on every map, and roughness 1 (THREE multiplies the roughness map by the material's roughness; the default 0.5 would halve it). Creates one Texture per map, o

r3_assets_unusedread-only

The account's images, models and audio files that nothing uses — no project, no entity template, no other user's project — with each one's size and date, biggest first, and the total. The same report as the R3 app's Settings → Storage, by the same rules the deletes use. A model lists the images only it uses, an HDR / EXR image its preview image: they go with it. Blender (.blend) files are not part

r3_asset_deletecan modify

Delete one of the account's images, models, audio files or Blender models (kind blender: a whole uploaded .blend with every version; its meshes in use stay) — the same reference-guarded delete as the R3 app. With asset:delete:created, only an asset THIS agent key created (today: images made with r3_image_create); with asset:delete:owned, any of the user's assets, and only when the user asked for i

r3_bug_report

Send R3 a bug report about R3 ITSELF (the engine, the editor, these tools), in the user's name and naming you (your agent key or app connection). It becomes one of the user's support issues, which only the user and R3's team see. Use it when R3 does something its documentation says it should not, after checking the docs (r3_docs_read) — not for problems in the user's own project, and not for featu

r3_bug_reports_mineread-only

The user's own support issues — bug reports and questions they or their agents (agent keys and app connections) sent R3 — newest first, with status, date, the project and whether an agent filed it (and which). Read it BEFORE r3_bug_report: when one already covers the fault, tell the user about that one (its link) instead of filing it twice. Needs the support:write right.

r3_roadmap_listread-only

The public R3 roadmap: what is planned, in progress, proposed by the community and shipped, with each item's vote count and whether the user has voted for it — plus the user's OWN suggestions still awaiting R3's approval, marked pending, and the ones R3 declined, marked declined with R3's reason (only the user sees them; neither is votable). Do not suggest a declined item again. Read it BEFORE sug

r3_roadmap_upvote

Add the user's vote to a public roadmap item (its id from r3_roadmap_list), when the user wants it or it covers what you were about to suggest. One vote per user: an item the user already voted for stays voted, and this never removes a vote. Needs the roadmap:vote right.

r3_roadmap_suggest

Suggest a feature for R3's public roadmap, in the user's name and naming you (your agent key or app connection). It is HELD until R3's team approves it: not public, not votable, until then. Call r3_roadmap_list first and upvote an existing item instead when one covers it. Say what the feature lets a person do and why (what you were building when you missed it). For something that is broken rather

r3_project_changesread-only

What OTHER people changed in a project — the user in any R3 tab, their other agents — oldest first, grouped per author and per thing: properties set, code and help updated (with versions), components added, deleted or restored, the project renamed. Your own changes (this key's) are never listed. Every answer about a project already ends with a short "Since your last call" line; this is its full li

Alternatives in Design & Media

Compare →
Try “Notion”, “Stripe”, “create invoice”, “browser”