VRoid Character MCP
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., "@VRoid Character MCPSet my character's eye color to teal and export a VRM."
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.
VRoid Character MCP
A local MCP server that drives one disposable copy of VRoid Studio through the application's own managed API. It exposes 86 tools for character parameters, textures and local makeup, hair authoring, Dress-up assembly and VRM export — with no mouse automation, no OCR and no screen scraping.
Status: 0.4.1 development. The tool layer is closed and verified end to end on a clean lab; the character art (formal v22 assembly, shoes, sitting skirt) is a separate line of work. See SCOPE.md for what 0.4.x includes and what it deliberately does not.
In action
These are native screenshots from development validation on 2026-10-19, not generated mockups. The outfit and makeup are separate work-in-progress candidates, not a single final avatar. Image sources and scope.
Dress-up assembly | Native walking preview frame |
|
|
The clothing comes from an external modeling and rigging workflow. MCP imports, adjusts, reviews, saves and exports it; seated-skirt intersections remain unresolved.
Before eyebrow and under-eye painting | After painting, saved and reopened |
|
|
The makeup example preserves the eyebrow shape and adds bounded 2D shading below the eyes. Native layer pixels, Undo/Redo and save/reopen were checked.
Left index fingernail | Right thumbnail |
|
|
These diagnostic colours demonstrate hand-nail masks and RGB texture import; they are not a finished nail-art design. More detail, including a closed-eye check, is in the Chinese walkthrough.
Related MCP server: Persona Motion Studio
What it is not
Not an official pixiv/VRoid product and not affiliated with it.
Not a sandbox. The agent guards the disposable copy against writing outside its own directory, but that is a local safeguard, not an OS boundary.
Not a licence for VRoid Studio, the VRM format or any character produced with it. See LICENSING.md.
How it works
prepare_lab.py copies a supported VRoid Studio installation into a lab
directory. The server launches only that copy, with a private profile, a private
registry key and its own TEMP, attaches with Frida, and calls managed methods
on Unity's main thread. Nothing is attached to a VRoid instance you started
yourself.
agent/profile_guard.js— remaps the machine profile into the lab and refuses writes, copies or child processes that point outside it.agent/main_thread.js— the main-thread queue, GC handle retention and editor singletons.vroid_mcp/tools_*.py— the published tool surface, one module per domain.vroid_mcp/runtime.py— process lifecycle, native calls and artifact checks.
Requirements
Windows.
VRoid Studio 2.14.0 (Unity 6000.0.62f1). Other builds are rejected: the native bindings are version-specific.
Python 3.10+, Git, Node.js and npm (for the Frida bridge dependency and JavaScript checks).
Install
python -m venv .venv
.\.venv\Scripts\python.exe -m pip install -r requirements.txt
npm install # frida-il2cpp-bridge for the agent
.\.venv\Scripts\python.exe prepare_lab.py --source "C:\Program Files\VRoid Studio" --lab D:\vroidmcp\lab-testprepare_lab.py copies and hash-verifies the installation. The source install is
only read; an existing lab is never replaced.
Connect an MCP client
Register a stdio server that runs launch.py with the lab:
{
"mcpServers": {
"vroid": {
"command": "D:\\vroidmcp\\VRoid-MCP\\.venv\\Scripts\\python.exe",
"args": ["D:\\vroidmcp\\VRoid-MCP\\launch.py", "--lab", "D:\\vroidmcp\\lab-test"]
}
}
}One lab can be owned by one server at a time. A second server is refused and the message names the process that holds the lock.
Workflow
list_face_params→ keep the returnedmodel_tokenasexpected_model.Read before writing:
list_parameters,list_hair_nodes,list_clothing_params.Write with
set_face_params/set_parameters/set_heightand re-read.Inspect with
capture_reviewbefore and after; look at the images.save_aswrites a new.vroidunder the lab'ssaves/.
For an outfit: get_wear_status → open_wear_project → import_xwear →
set_wear_fit → save_wear_project → export_wear_vrm. Dress-up is independent
of ordinary editing and has its own token.
Textures and makeup are native too: list regions and layers, open the matching canvas, and add PNG layers or bounded stamps through native history. Those tools refuse to run while a Dress-up assembly is open.
Verify a checkout
powershell -NoProfile -ExecutionPolicy Bypass -File tools\run_checks.ps1 -ManifestThis pins TEMP/TMP into work\temp, runs the unit tests, the tool-schema
smoke against tools/expected-tools.json, the JavaScript behaviour checks and
the source manifest, and writes checks.json with an exit code. Add -Native
to exercise one read-only call per domain against a free lab (it launches VRoid),
and -Provenance to enforce the rewrite threshold described below.
The full proof is a clean-lab run that ends in an exported VRM:
& .\.venv\Scripts\python.exe .\tools\e2e_clean_lab.py `
--source "C:\Program Files\VRoid Studio" --lab D:\vroidmcp\lab-e2e `
--xwear <outfit.xwear> --json .\work\e2e.json
& .\.venv\Scripts\python.exe .\tools\vrm_inspect.py .\lab-e2e\saves\e2e-clean-lab.vrmvrm_inspect.py parses the GLB and the VRM JSON chunk directly, so the exporter's
own report is not the evidence.
Known limitations
Height is not exact across save/reopen.
set_heightreaches the target in session; the reopened file measures about 1.4 cm higher in this build. The clean-lab report records the drift instead of hiding it.Per-strand hair colour is not visible. Writing the
Level1BaseHair_*colour channels reads back but changes 0 of 640x640 rendered pixels; global hair colour (colors/Hair/All) changes 24.6%. Only global colour is supported.M00 has not received the coverage F00 has.
Rear-skirt collision is paused and unresolved; it is not assumed away.
Godot import, materials and physics require separate engine-side validation.
Licensing and provenance
This repository began as a fork of Karylcode/VRoid-MCP, which is public but
carries no licence: license: null on GitHub and no licence file in the
baseline commit. Public visibility is not a grant, so the inherited
implementation has been replaced in this development line rather than relicensed.
LICENSE covers the original code in this repository.
LICENSING.md states the scope and what is still excluded.
UPSTREAM.json records the 26 baseline paths this rewrite is measured against.
REWRITE.md is the ledger: how "rewritten" is measured, which behaviour gates must hold, and how far the replacement has progressed.
Bundled preset and label data keeps its own MIT notices under
vroid_mcp/data/*/LICENSEandNOTICE.
tools/check_provenance.py measures the progress: it reports, per inherited
path, the share of baseline lines still present in order, plus a cross-file pass
that finds inherited lines moved into new modules.
Source layout
Path | Purpose |
| stdio entry point |
| verified installation copy |
| server factory, lifecycle gate, session tools |
| tool surface by domain |
| texture, layer and makeup tools |
| process lifecycle, native calls, artifacts |
| refuses to launch while the crash registry key exists |
| one owning process per lab, with its PID |
| indirection so a restarted session reaches every tool |
| profile remapping and outside-write refusal |
| main-thread queue and retained objects |
| model, history, saving and capture dispatch |
| typed parameter bindings |
| one-command acceptance with a JSON report |
| generated reference for all 86 tools |
| must-do, may-skip and out-of-scope for 0.4.x |
| rewrite ledger and provenance gates |
| release notes |
This server cannot be deployed
Maintenance
Related MCP Connectors
Personal MCP server for humans who create. Proof of authorship, license control.
MCP Server for Slima - AI Writing IDE for Novel Authors with AI Beta Reader.
Self-hosted MCP server: 26 deterministic dev, security, and EVM tools.
A MCP server built for developers enabling Git based project management with project and personal…
Related MCP Servers
- AlicenseCqualityCmaintenanceComprehensive MCP server for Blender with 308 tools across 25 modules, enabling AI-powered 3D creation and full VRChat avatar pipeline.111008MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to show, animate, and control a VRM character on the desktop, including posing and motion installation via MCP tools.1MIT
- AlicenseAqualityAmaintenanceEnables full control and observation of VNyan VTuber avatar software from any MCP client, including reading and writing parameters, triggers, blendshapes, bones, node graphs, and settings.30MIT
- AlicenseAqualityBmaintenanceAn MCP server that enables AI agents to inspect, validate, and preview VRM/VRMA 3D avatar files locally, with tools for metadata extraction, validation, and rendering snapshots or animations via headless Chrome.561 npmMIT




