vrcw-mcp
Provides an always-on bridge inside the Unity Editor with tools for inspecting editor state, querying the console and compile status, refreshing assets, invoking menu items, evaluating C# and static methods, running/cancelling jobs, and managing scenes, prefabs, assets, and project setup.
Provides tools for developing VRChat worlds with the VRChat Worlds SDK and UdonSharp: scaffolding worlds, creating and compiling Udon behaviours, applying scene specs, auditing spatial layout and budgets, verifying interactions in ClientSim, checking VRChat logs and Udon exceptions, and building local PC and Quest .vrcw worlds. Upload and publishing APIs are intentionally not exposed.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@vrcw-mcpscaffold a room with a door button and verify it in ClientSim"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
VRChatWorldSDKAgentic
Tooling that lets an AI agent develop VRChat worlds autonomously in Unity 2022.3.22f1 + VRChat Worlds SDK 3.10.5 — organising assets, writing Udon, assembling scenes, verifying behaviour, and building.
Clone it, run one command, and both halves of the MCP surface come up against your project:
node scripts/install.mjs --project "E:/Unity/WorldTest"No npm install, no second repository to fetch, no editor preferences to set by hand. The generic Unity MCP
layer ships in the box.
Package | What it is |
| UPM package |
| Node/TS MCP server: 71 tools fronting the bridge |
| Owns the editor process: picks the right install, relaunches on death, names and answers blocking dialogs |
| Roslyn linter for UdonSharp — runs outside Unity, ~150ms |
| Bundled generic Unity MCP (CoplayDev, MIT, pinned tag) — GI baking, NavMesh, prefabs, Test Runner, profiling |
| Committed single-file builds of the two Node programs, dependencies inlined |
Two servers, one editor. Ours covers everything VRChat-specific; the bundled one covers the generic Unity surface we deliberately do not reimplement. They share nothing but the editor they attach to.
Why a custom bridge at all: VRChat's build API needs a live SDK control-panel EditorWindow and a pumped
EditorApplication.update, so -batchmode -executeMethod cannot drive it — and Unity's own MCP requires
Unity 6, which VRChat does not support. See docs/ARCHITECTURE.md.
Status
Complete and verified against a live editor: 167 checks across 12 suites.
Suite | Covers | Result |
| scaffold → script → verify → build the full world, PC and Quest | 21/21 in ~48s |
| bridge transport, eval, reflection, jobs | 21/21 |
| UdonSharp authoring loop | 15/15 |
| project setup, scaffolding, validation, scene spec, audit, renders | 20/20 |
| ClientSim behaviour, local builds, real-client preflight | 16/16 |
| dual-platform budget, provenance, procedural geometry | 17/17 |
| out-of-Unity linter, Udon exposure whitelist | 11/11 |
| checkpoint / rollback safety | 10/10 |
| bundled generic layer: licence, install, telemetry, liveness, reachability | 14/14 |
| MCP stdio protocol and tool surface | 6/6 |
| open-licence fetching, against the live Poly Haven API | 8/8 |
| raises a real modal dialog and recovers from it | 8/8 |
node tests/run-all.mjsThe end-to-end run builds the world the plan called for: a button that opens a door, a counter
synchronised across players, a video player, a prop you can pick up, and a chair you can sit in. It
scaffolds the scene, generates a room with a doorway, places every object and SDK component declaratively,
lints four UdonSharp behaviours before Unity sees them, compiles them, wires and verifies their fields reach
the backing UdonBehaviours, audits the geometry, renders the scene, checks the budget, proves every
interaction in a ClientSim play-mode session — interact, grab, drop, sit, stand, and the video callbacks, 46
scenario steps — parses the telemetry each feature emits, and produces a real .vrcw for both PC and
Quest, with no human in the editor.
One tool is not end-to-end verified: verify_multiclient, which launches real VRChat clients to test
synchronisation, needs a VRChat client installed and an account signed in. Its preconditions, log parsing and
preflight are tested (verify_multiclient_preflight); the launch-and-converge path has never been run here.
It reports precisely which preconditions are missing rather than failing opaquely, but treat it as untested
code until you have run it yourself.
Three other honest limits. A job interrupted by an editor restart is journalled and reported as
interrupted; it does not resume by itself, because a half-finished build or play-mode session has to start
again anyway. Scenario steps do not check reachability — grab and interact reach the object wherever it
is, so whether a player could actually get to it stays scene_spatial_audit's question. And there is no
texture atlasing or LOD generation: budget_report says when atlasing would help and
budget_apply_import_presets handles compression, but rewriting meshes and UVs is a destructive operation
that deserves a human deciding to run it.
Related MCP server: Union Unity MCP Server
Tools
Bridge and observation — unity_instances, unity_ping, unity_health, unity_methods,
unity_harden_editor, unity_editor_state, unity_console, unity_compile_status, unity_refresh_assets,
unity_menu_item, unity_eval_csharp, unity_invoke_static, unity_get_static,
unity_job_submit/status/list/cancel/wait
Bundled generic layer — companion_status, companion_setup (diagnose and repair it from inside an
agent run; its own ~47 tools arrive through the second MCP server)
UdonSharp — udon_lint (no Unity), udon_whitelist_query, udon_syncable, udon_export_whitelist,
udon_status, udon_create_script, udon_compile, udon_attach, udon_set_fields, udon_read_vars,
udon_list_behaviours
World and scene — world_project_status, world_fix_project, world_scaffold, world_describe_scene,
world_validate, scene_apply_spec, scene_describe, scene_component_whitelist, scene_spatial_audit,
scene_survey_shots, geo_generate, geo_kinds
Verification and build — verify_scenario_schema, verify_clientsim (18 scenario step types: wait,
interact, send_event, set_var, grab, drop, sit, stand, teleport, respawn, and assertions on variables, active
state, position, held state, station occupancy and the console), verify_build_local,
verify_multiclient_preflight, verify_multiclient, verify_vrc_logs, verify_udon_exceptions,
world_build_status, world_set_dry_run, world_switch_platform
Budget and assets — budget_report, budget_snapshot, budget_diff, budget_import_audit,
budget_apply_import_presets, assets_inventory, assets_unused, assets_make_material,
assets_import_file, assets_ledger, open_assets_sources, open_assets_search,
open_assets_files, open_assets_fetch
Safety — project_status, project_checkpoint, project_checkpoints, project_rollback
Upload is deliberately absent. The autonomy boundary is local Build & Test, so BuildAndUpload and the
publish APIs are not exposed at all rather than merely discouraged.
Install
node scripts/install.mjs --project "E:/Unity/WorldTest"It links com.agentic.vrcw and the bundled com.coplaydev.unity-mcp into the project, checks the committed
bundles, builds the linter if dotnet is present, runs uv sync for the bundled Python server, and writes
.mcp.json with both servers — the generic one with telemetry switched off. Every step is idempotent and
reports itself, so re-running it is also how you diagnose a setup.
Option | Effect |
| copy the Unity packages instead of linking them (a link keeps your edits live) |
| write the MCP config somewhere else; |
| do not run |
| use only what is committed |
| machine-readable report |
Then check which Unity installs may open the project, and run the supervisor:
node bundled/vrcw-supervisor.mjs editors --project "E:/Unity/WorldTest"
node bundled/vrcw-supervisor.mjs watch --project "E:/Unity/WorldTest" --auto-dismiss-dialogs trueeditors exists because several installs can claim the same version string while only one is the build
VRChat supports — the Unity China (...f1c1) builds are rejected. --auto-dismiss-dialogs lets the
supervisor answer allowlisted blocking prompts; without it a modal dialog stalls an unattended run
indefinitely.
One-time human step
Sign in once in the SDK control panel of that Unity project. The panel only registers builders while
APIUser.IsLoggedIn, so even local Build & Test needs it. Credentials land in EditorPrefs via
SecurePlayerPrefs; the agent never handles a password or 2FA code.
If the generic half goes quiet
companion_status says why, in terms of the four things that actually go wrong: Unity only rescans
Packages/ at startup, so a package added to a running editor never compiles until
PackageManager.Client.Resolve() runs; the companion's bridge is gated behind an EditorPref that defaults to
false; that bridge does not survive a domain reload, so something has to start it again after every recompile;
and the status file it leaves behind outlives the editor, so a machine restart leaves a file advertising a
port nothing is listening on. companion_setup fixes the first two on demand, the bridge handles the third on
every load, and serving comes from connecting to the port rather than from the file — which is why a freshly
opened editor, or a freshly rebooted machine, needs nothing.
Development
npm install # only for building; a clone runs from bundled/ without it
npm run build # packages/*/dist
npm run bundle # refresh the committed bundled/ artifacts
npm test # every suiteDistribution, when you want it elsewhere:
node scripts/make-vpm-listing.mjs --base-url https://your.host/vpm # Creator Companion listing + zip
node scripts/publish.mjs --dry-run # npm, dry by default
node scripts/update-vendored.mjs --tag v10.3.0 # refresh the bundled generic layerupdate-vendored.mjs refuses to vendor a tag that is not still under a licence permitting redistribution,
and tests/companion-mcp.mjs fails if the upstream tools we rely on are renamed.
Layout
skills/— agent knowledge packs (vrcw-udon,vrcw-world), grounded in the SDK as verified heregenerated/— indexes generated from the installed SDK, so they cannot drift (udon-whitelist.json: 35,333 nodes, 133 events, 783 types)tests/— acceptance suites that drive a live editorscripts/— install, bundle, vendor refresh, distributionthird_party/unity-mcp/VENDORED.md— what is vendored, from which tag, under which licence, and whydocs/ARCHITECTURE.md— why the design is shaped this way, and the SDK constraints behind each decision
Notes
The bridge compiles and runs arbitrary C# in the editor. It binds
127.0.0.1only and requires a per-session token; treat that token as a local credential.<project>/.agentic/holds bridge state: console JSONL, compile diagnostics, job journal, budget snapshots, asset ledger, renders, supervisor status, editor log.Regenerate the Udon whitelist after an SDK upgrade:
udon_export_whitelist.The bundled generic package also starts a server of its own on load (
127.0.0.1:8080by default) — that is its behaviour, not ours; the telemetry opt-out covers it because the editor passes it down.
Local configuration
The installer generates .mcp.json with paths for your machine; this file is intentionally ignored by Git.
See .mcp.example.json for the configuration shape. Run scripts/install.mjs --project <project-path>
to generate the real configuration, or copy the example and replace /absolute/path/to/VRChatWorldSDKAgentic
with your checkout path. Never commit local credentials or the project's .agentic/ runtime state.
License
Original project code is licensed under the MIT License. Vendored MCP for Unity retains its upstream MIT license. The committed Node bundles include third-party code; the applicable copyright notices and license texts are collected in bundled/THIRD_PARTY_NOTICES.txt. Unity and the VRChat Worlds SDK must be installed separately and are not redistributed by this repository.
This server cannot be deployed
Maintenance
Related MCP Connectors
Build, validate, and deploy multi-agent AI solutions from any AI environment.
Drive a live Cinevva game session: edit game files, import CC0 assets, preview changes.
Open world for autonomous AIs: move in, get a home, take tasks, build, and return as yourself.
AI-native programming language and toolchain for accountable, verifiable agent-driven development.
Related MCP Servers
- AlicenseBqualityCmaintenanceA bridge between Unity and AI assistants that enables AI to interact with Unity game environments through a standardized interface for code execution, scene analysis, and runtime debugging.342 npm7MIT
- AlicenseNot gradedqualityFmaintenanceEnables AI agents to interact with Unity projects through multimodal vision, code analysis, asset management, and scene manipulation. Supports real-time Unity editor control, project search, script creation, and visual debugging through screenshots.32MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to query and control the Unity Editor, supporting scene management, GameObject manipulation, asset browsing, play mode control, and real-time editor operations through 52+ tools.1MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to control the Unity Editor through MCP, allowing scene building, runtime scripting, visual QA, and more.5Apache 2.0