mqdh-mcp
Provides tools for Meta Quest developers to list developer organizations, apps, and release channels, and to upload APK/OBB builds to channels such as ALPHA, BETA, RC, or LIVE via Meta's developer platform.
Integrates with the Oculus Graph API (graph.oculus.com) to look up organizations, apps, release channels, and test users, and to copy existing builds between channels.
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., "@mqdh-mcp Upload C:\builds\game.apk to the BETA channel of Space Game with notes 'fixes crash'."
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.
mqdh-mcp
Unofficial MCP server for Meta Quest developers. Lets an AI assistant list your developer organizations, apps and release channels, and upload builds (APK/OBB) to a channel such as ALPHA, BETA, RC or LIVE — the same way Meta Quest Developer Hub (MQDH) does.
Not affiliated with or endorsed by Meta. Uploads use Meta's official
ovr-platform-util. Org/app/channel lookups use undocumentedgraph.oculus.comoperations that may change without notice.
TL;DR for AI assistants
auth_status— confirm a Meta login is available.list_orgs→select_org { org }— pick the developer organization (saved for later calls).list_apps→ find the app;list_channels { app }— see channels and latest builds.upload_build { app, channel, apk, dry_run: true }— preview, then run withoutdry_run.upload_status { job_id }— poll untilstatusissucceededorfailed.
Rules: uploads are drafts unless publish: true. Publishing to LIVE (or copying a build into LIVE) needs confirm_live: true — only set it when the user explicitly asks to ship to the public store. app and org accept an id or a partial name.
Related MCP server: Antigravity Play Console MCP
Tools
Tool | Purpose | Key arguments |
| Show login state, token source, selected org | — |
| List organizations you belong to | — |
| Set the default organization |
|
| List apps in an org |
|
| Channels + latest builds for an app ( |
|
| Upload a build in the background; returns |
|
| Progress/output of an upload (or list all) |
|
| Copy an existing build into another channel |
|
| Test users for an org |
|
| Raw graph.oculus.com query (advanced) |
|
| Run any bundled |
|
channel accepts ALPHA, BETA, RC, LIVE (aliases store, production), a custom channel name, or a channel id.
Example
User: Upload C:\builds\game.apk to the BETA channel of "Space Game" with notes "fixes crash".
→ list_orgs / select_org { "org": "My Studio" }
→ upload_build { "app": "Space Game", "channel": "BETA", "apk": "C:\\builds\\game.apk", "notes": "fixes crash", "dry_run": true }
→ upload_build { "app": "Space Game", "channel": "BETA", "apk": "C:\\builds\\game.apk", "notes": "fixes crash" }
← { "job_id": "a1b2c3d4", "channel": "BETA", "mode": "draft", "status": "uploading" }
→ upload_status { "job_id": "a1b2c3d4" }Install
Requirements: Node.js 20+, and Meta Quest Developer Hub installed and logged in (open it once so it downloads ovr-platform-util).
git clone https://github.com/thankyoucoinbase/mqdh-mcp.git
cd mqdh-mcp
npm installClaude Code
claude mcp add mqdh -- node /absolute/path/to/mqdh-mcp/Source/server.jsClaude Desktop / other MCP clients
{
"mcpServers": {
"mqdh": { "command": "node", "args": ["/absolute/path/to/mqdh-mcp/Source/server.js"] }
}
}Authentication
No separate login: the server reuses your existing MQDH session. Token sources, in order:
MQDH_TOKENenvironment variableMQDH's
odh/mcp-config.jsonin your app-data folderWindows Credential Manager entry
Meta Quest Developer Hub/defaultmetavr auth profile-token
If none work, log in to MQDH or run metavr auth login.
Configuration
All optional; defaults follow the standard MQDH install.
Variable | Default |
|
|
|
|
|
|
|
|
| — |
|
|
Tested on Windows. macOS paths follow MQDH's layout but are untested.
Security
Tools never return the access token; it is redacted from upload output.
ovr-platform-utilreceives the token as a command-line argument (as MQDH does), so it is visible to other local processes while an upload runs.The
graphqltool can run mutations as you. Remove it from your client's allowed tools if you don't need it.
How it works
Operation | Mechanism |
Orgs, apps, channels, test users, copy build |
|
Upload |
|
Development
npm test # offline tests, no login needed
npm run test:live # read-only tests against your account; never uploadsProject layout and conventions for contributors (human or AI): AGENTS.md.
License
Available Tools
11 toolsauth_statusA
Check which Meta account is in use and where the token came from.
Inputs: no named parameters.
copy_buildA
Copy an existing build (binary id from list_channels) into another release channel. Copying into LIVE requires confirm_live=true.
Inputs: app (required), binary_id (required), to_channel (required), org, +1 more.
graphqlC
Run a raw GraphQL query against graph.oculus.com as the logged-in developer (advanced).
Inputs: query (required), variables.
list_appsC
List apps in an organization.
Inputs: org.
list_channelsA
List an app's release channels (ALPHA/BETA/RC/LIVE/custom) and their latest builds. The store channel has is_live=true.
Inputs: app (required), org.
list_orgsA
List the developer organizations the logged-in account belongs to.
Inputs: no named parameters.
list_test_usersB
List test users for an organization.
Inputs: org.
metavrB
Run any metavr CLI command bundled with MQDH (devices, app install, logcat, perf, ...).
Inputs: args (required).
select_orgA
Select the active developer organization (by id or name). Saved across sessions.
Inputs: org (required).
upload_buildA
Upload an APK (Quest) or build directory (PC) to an app's release channel with ovr-platform-util. Uploads as a DRAFT unless publish=true. Publishing to LIVE requires confirm_live=true. Use dry_run=true to preview the exact command. Runs in the background: poll upload_status with the returned job_id.
Inputs: apk (required), app (required), channel (required), obb, +6 more.
upload_statusA
Get progress and output of uploads started by upload_build. Omit job_id to list all jobs.
Inputs: tail, job_id.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 11 tools
Core tools target distinct resources and actions (list_orgs vs select_org, upload_build vs upload_status vs copy_build), and the descriptions clearly separate read paths from write paths. The only soft spot is the pair of catch-all escape hatches (graphql, metavr), which can in principle do anything an agent might otherwise pick a dedicated tool for, though they are explicitly flagged as advanced/raw.
The majority of tools follow a clean verb_noun pattern (list_orgs, select_org, list_apps, list_channels, upload_build, upload_status, copy_build). Deviations are minor: auth_status is noun-first and graphql/metavr are bare product names, but all remain immediately readable.
Eleven tools is well within the sweet spot and each one maps to a distinct step in the org -> app -> channel -> build workflow. Nothing feels padded; even the two broad tools exist to cover long-tail needs without bloating the surface.
The surface covers auth, org/app/channel discovery, build upload with draft/publish semantics and async polling, and channel-to-channel copying. Gaps exist around build lifecycle management (deleting builds, editing release notes, app creation, broader user management), but graphql and metavr provide viable workarounds.
Maintenance
Related MCP Connectors
Manage Meta apps: creation, configuration, webhooks, permissions, compliance, and App Review.
Ship a new Android app from chat. AI runs Google Play Console listings, screenshots, releases, uplo…
App Store Connect operator for AI agents: icons, TestFlight builds, listings, IAP, rejection fixes.
One place to build, share, and govern the skills and tools your AI agents use at work.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to automate Android release workflows via the Google Play Android Publisher API, including deploying builds, managing listings, and replying to reviews.40MIT
- AlicenseNot gradedqualityCmaintenanceEnables autonomous AI agents and developers to programmatically manage Google Play apps via the Play Developer API v3, including uploading Android App Bundles, managing release tracks, updating store listings, and replying to user reviews.3MIT
- AlicenseAqualityBmaintenanceEnables AI agents to search Aurora OS app store, inspect app and release information, and manage developer applications including RPM upload, metadata editing, and publication scheduling.17MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI coding assistants to discover and configure Meta Developer apps, manage team roles and webhooks, monitor permissions, create test users, and invoke the Graph API directly.MIT