VRCH MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| logging | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| apps_listB | List Apps and retained drafts on the invited host. |
| apps_stateA | Read the active App draft, desired/saved revisions and actual target application states. Read this after interruption; do not infer application from file transfer success. |
| apps_createA | Create a new App workspace. Returns its actual cwd; does not change the shared shell directory. |
| apps_openA | Open an existing App or retained draft. Returns cwd; never overwrites a draft or sends cd to the shared PTY. |
| apps_publishB | After all files and build steps in a complete editing round finish, publish its exact draftRevision. A failed target load preserves the old applied revision. |
| apps_saveC | Publish the completed draft and atomically save its .vrchapp package. Separate saved package success from preview/device application results. |
| apps_preview_inputA | Send a normalized control or pointer event to the connected preview only. Requires current AI editing control; cannot launch or control the device App. |
| apps_operation_statusB | Query the durable result of an interrupted App action. Do not automatically replay a mutation. |
| apps_export_beginC | Fix a read-only snapshot of an already saved App for file_download. Does not Save or require editing control. |
| apps_import_inspectB | Validate a completed .vrchapp app-package upload. Returns its inspected reference and update conflict/confirmation state; file_done alone never imports an App. |
| apps_import_commitB | Commit an inspected App package using its previous package digest and the approved update decision. |
| apps_launchA | Launch or focus a saved App on the device within this invitation’s enabled Launch/Exit scope. Read apps_state first. Supply replaceInstanceId only after deciding to replace that known target; new real I/O permissions still require the person. Does not save a draft. |
| apps_exitA | Exit the specified current device App within this invitation’s enabled Launch/Exit scope. Preserves the shell, access, App files and saved data. Read apps_state after interruption; never replay blindly. |
| apps_input_targetsA | Read the actual active preview and device App bindings before input. Coordinates are normalized within the App viewport, independent of the device’s 150% browser zoom. Does not launch, link or switch the person’s preview. |
| apps_controlA | Simulate known E1-E4 rotation/press and K1-K4 keys on an explicit active preview or device App. down/up/cancel send exact phases; click/long form a paired press using holdMs (default 50/800 ms). K1 always invokes the host Menu. Requires AI control; loss of control cancels only AI-held inputs. |
| apps_interface_inputA | Click, drag, scroll, type English/ASCII text or send a key/chord in the active device App interface. Use event type guide_start to press the current App Guide Start on an explicit preview/device target; it does not approve access or I/O. Other host menus and permission dialogs remain human-operated. Read apps_input_targets first; pointer coordinates are normalized App coordinates, scroll deltas are CSS pixels. Delivery confirms sent/dispatched events; use screenshots/App state to verify the intended result. |
| apps_file_exportA | Create a fixed download snapshot of a relative file in the current App workspace. Returns its reference and sha256; use file_download with app-workspace. Does not change preview or save the App. |
| apps_file_commitA | Atomically deliver a completed app-workspace upload to a relative workspace path. Omit expectedSha256 only for a new file; supply the existing file sha256 to replace it. Does not publish, save or execute the file. |
| file_uploadB | Upload a local regular file through the shared resumable file transport. App packages must use .vrchapp and remain private until inspect/commit. |
| file_downloadC | Download an authorized fixed App package reference to a new local path, verifying all bytes before an atomic no-overwrite commit. |
| file_pauseB | Pause the current shared file transfer. |
| file_resumeB | Resume the current shared file transfer. |
| file_cancelB | Cancel the current shared file transfer. |
| ai_reportA | Report the current action, result or next step to the person in one or two brief sentences in their language. Works while waiting for Allow AI and after approval; never include raw commands, secrets or internal reasoning. |
| ai_capabilitiesA | Read actual enabled capabilities, targets, control owner and pause state for this approved connection. Unavailable capabilities do not prevent connection. |
| terminal_connectB | Join an invited device Terminal. Wait for the human to approve once. Approval grants terminal observation and on-demand screenshots; Apps invitations grant AI editing on approval; ordinary Terminal invitations require the human to grant input control. |
| terminal_eventsA | Read terminal events and actual images shared by the human automatically. Call terminal_events({}) while waiting for ai_pending/approval and between actions. Omit waitSeconds for the normal 20-second wait; returns early on events. Does not take a screenshot. One complete queued capture batch is returned per call, with separate images for every captured screen. |
| terminal_inputA | Send shell input only while the human has granted AI input control. Shared screenshots are included automatically in the response. |
| take_screenshotA | Capture the device screens once and return the complete batch as separate images. Default follows the human Multi-screen setting: on captures all screens, off captures primary only. While on, screen may select primary or a display connector from prior image metadata. Does not change input control. |
| terminal_disconnectA | Disconnect this client. Retain the admitted session credential for resuming within its authorization. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 30 tools
Descriptions work hard to distinguish tools (device App vs preview vs shell), but three input tools—apps_control, apps_interface_input, apps_preview_input—overlap heavily in purpose, and apps_save/apps_publish both describe publishing a draft. An agent could realistically misselect among these.
Nearly all tools use snake_case with clear domain prefixes (terminal_, apps_, file_, ai_), giving a predictable namespace. take_screenshot breaks the prefix convention slightly, but overall it's consistent and readable.
30 tools exceeds the 25+ threshold that signals an over-stuffed surface for a single server. While the domain (terminal + Apps + file transfer) is broad, several tools could plausibly be merged, making this heavy relative to scope.
Coverage is strong: Apps lifecycle (create/open/save/publish/launch/exit), file transfer with pause/resume/cancel, input, import/export, and status/recovery tools are all present. Minor gaps around some session lifecycle edges, but no dead ends for core workflows.