Using Meta XR Operator with Meta Quest
Updated: Jul 23, 2026
Experimental feature
Meta XR Operator is an experimental component of the Meta XR Core SDK. Tool names, APIs, and behavior may change in future releases. Avoid depending on it in production apps. You can run Meta XR Operator on a Meta Quest headset, not just in the Editor or Simulator. The OpenXR API layer runs inside your app on the device, and its MCP server listens on port 8720 inside the app’s process. To reach it from your computer, you forward that port over ADB and let the MCP proxy on your host connect to it.
Build and deploy from Unity
In Unity, open File > Build Profiles and switch the active platform to Android (Meta Quest).
Open Edit > Project Settings > Meta XR and use the Project Setup Tool to fix any outstanding Meta XR Operator issues for the Android platform.
In Build Profiles, enable Development Build so the on-device MCP server and tools are available.
Connect your Quest, then build and run your project on the device as you would for any Quest build.
When Meta XR Operator is activated for your project, the build bundles the OpenXR API layer into your Android app automatically, so there’s no separate layer to install on the device.
Add the internet permission
The on-device MCP server needs network access. Make sure your app requests the INTERNET permission. In Unity, set Player Settings > Other Settings > Internet Access to Require, or add the permission to your Android manifest:
<uses-permission android:name="android.permission.INTERNET" />
On Horizon OS v205 or later, enable experimental features so Meta XR Operator can expose its full set of tools.
Declare the feature in your Android manifest:
<uses-feature android:name="com.oculus.experimental.enabled" android:required="false" />
With your app installed, turn on experimental features on the device:
adb shell setprop debug.oculus.experimentalEnabled 1
This property isn’t persisted across reboots, so re-run it after the headset restarts.
Forward the port and connect
On the headset, the bundled API layer runs the MCP server on port 8720 inside your app’s process. Connecting from your computer needs two things:
- The MCP proxy registered with your agent on the host. This is the same proxy you set up in Getting started, so there’s nothing new to register for Quest.
- An ADB port forward so the proxy can reach the on-device server.
Forward the port to your computer with ADB:
adb forward tcp:8720 tcp:8720
Your computer can bind host port 8720 only once. If you also ran your app in the Unity Editor or Meta XR Simulator, that session already holds host port 8720, and adb forward tcp:8720 tcp:8720 fails with “address already in use.” Close the Editor or Simulator session first, or forward to a different host port and point the forward there, for example adb forward tcp:8721 tcp:8720.
With your app running on the headset and the port forwarded, the proxy connects to the on-device server and your agent receives the app’s tools automatically. Ask your agent about the running app just as you would on desktop. For details on registering the proxy with your agent, see
Getting started for more information.
To manage forwarding:
adb forward --list # list forwarded ports
adb forward --remove tcp:8720 # stop forwarding port 8720
Optional: Test with the headset off your face
By default the proximity sensor sleeps the headset the moment it leaves your face, which pauses the OpenXR runtime and makes tools unresponsive while the device sits on a desk. To keep the device active as if worn:
adb shell am broadcast -a com.oculus.vrpowermanager.prox_close
This override isn’t persisted across reboots. To hand control back to the physical sensor:
adb shell am broadcast -a com.oculus.vrpowermanager.automation_disable
Optional: Front-load the screen capture permission
The screen capture tool uses Android MediaProjection, which needs a one-time in-headset consent. By default the dialog appears on the first capture call, and the tool returns a retryable “permission pending” message until you approve it. To show the dialog at app start instead, set this property before launching the app:
adb shell setprop debug.meta_xr_operator.request_capture_permission 1
Like the other debug. properties, this isn’t persisted across reboots.
- The app must be running and focused on the headset for live tools to return data.
- Reading session, tracking, and frame state and setting controller input and poses work on Quest. The one exception is head-pose override (
openxr_set_head_pose): on a headset the head pose follows the physical device, so the agent can’t override it. - Image capture requires a one-time in-headset permission. You can front-load this consent at app start, as described above.