Model Context Protocol
Release from your editor.Let the assistant drive.
Ubriot publishes an MCP server. Point Claude, Cursor, or any MCP client at it and the whole release path becomes callable: 20 tools for builds, store submission, OTA updates, push, and failure diagnosis. No dashboard, no context switch.
Package
ubriot-mcp
Transport
stdio
Tools
20
Runtime
Node 18+
Clients
Claude · Cursor
Auth
Token or login
AI tools
2 of 20
- #412 iOSBuilding, Building
- #409 AndroidOn Google Play, Done
- #410 iOSNeeds you, Needs you
- #411 iOSSigning, Building
- #406 iOSOn TestFlight, Done
Setup
One config block, then ask.
Any MCP client
Add the server to your client's MCP config, Cursor's mcp.json, Claude Desktop's config file, or anything else that speaks MCP over stdio.
{
"mcpServers": {
"ubriot": {
"command": "npx",
"args": ["ubriot-mcp@latest"],
"env": {
"UBRIOT_TOKEN": "ubk_...",
"UBRIOT_PUSH_SERVER_KEY": "...",
"OPENAI_API_KEY": "sk-..."
}
}
}
}Claude Code, one command
Registers the same server at user scope with an API key from /dashboard/api-keys.
claude mcp add-json -s user ubriot '{
"command": "npx",
"args": ["ubriot-mcp@latest"],
"env": {
"UBRIOT_TOKEN": "ubk_..."
}
}'Environment
UBRIOT_TOKENOne ofAn API key (ubk_...) created at ubriot.dev/dashboard/api-keys, shown once. Recommended. Used as the bearer token for every API call. API keys cannot rotate the git webhook secret.
UBRIOT_EMAIL + UBRIOT_PASSWORDOr bothAccount credentials. The server logs in on first tool call and caches the token for the session. Needed only for ubriot_setup_git_webhook. Requires ubriot-mcp 1.0.2 or later.
UBRIOT_PUSH_SERVER_KEYPush onlyA push server key from ubriot push create-server-key. ubriot_send_push sends it with each request. Requires ubriot-mcp 1.0.2 or later.
UBRIOT_API_BASEOptionalOverrides the API base URL. Defaults to https://api.ubriot.dev/api/v1.
OPENAI_API_KEYAI tools onlyRequired by the two AI tools, failure diagnosis and release notes. Every other tool works without it.
credentials live in your own client config; the server reads them from its environment and holds nothing
Tool surface
All 20 tools, in six groups.
Apps and setup
5 toolsubriot_list_appsLists every release app in the workspace with its ID, name, slug, and iOS or Android identifiers.
ubriot_create_appRegisters a new release app: name and slug, plus optional repo URL, default branch, Expo project root, bundle identifiers, App Store Connect app ID, and TestFlight auto-submit.
ubriot_update_appUpdates an existing app's config, the same fields as creation, by app ID.
ubriot_app_readinessReturns the credential and configuration checklist for an app, what is set up and what is still missing before it can build and submit.
ubriot_setup_git_webhookRotates the app's git webhook secret and returns the secret plus the webhook URL to paste into GitHub, so pushing a tag triggers a build. Needs a signed-in session, not an API key.
Builds
6 toolsubriot_trigger_buildQueues an iOS or Android build for an app, optionally on a specific branch. Returns the build ID and initial status.
ubriot_build_statusReports a build's status, platform, branch, start and finish times, error message, and any TestFlight or Google Play submission state.
ubriot_build_logsFetches the raw logs for a build.
ubriot_list_buildsLists recent builds across the workspace or for one app, up to a limit that defaults to 20.
ubriot_cancel_buildRequests cancellation of a queued or running build.
ubriot_build_analyticsAggregates build volume, success rate, duration percentiles, queue time, retries, build minutes, artifact size, per-phase timing, worker OS and hardware breakdowns, submission counts, and top apps over a date range.
Store submission
2 toolsubriot_submit_testflightQueues a completed iOS build for TestFlight beta distribution.
ubriot_submit_google_playQueues a completed Android build for Google Play.
OTA and release health
3 toolsubriot_publish_otaReturns the exact ubriot update command for a channel, production by default. It publishes nothing itself, because the JavaScript bundle is exported on the machine with the app's source.
ubriot_list_updatesLists the OTA updates published for an app with channel and date.
ubriot_release_healthOne tool, four actions: read current backend health, uptime, and open release watches; set the monitored health URL and toggle monitoring; auto-detect a health endpoint from a domain; or roll back the last release on a channel.
Push
2 toolsubriot_send_pushSends a push notification with a title, body, and optional custom payload to every registered device for an app. Needs UBRIOT_PUSH_SERVER_KEY.
ubriot_list_campaignsLists an app's push campaigns with name and status.
Diagnosis and AI
2 toolsubriot_diagnose_failurePulls the logs from a failed build and returns a plain-English root cause, the exact error, and a step-by-step fix. Needs OPENAI_API_KEY.
ubriot_generate_release_notesTurns a change list or raw commit messages into App Store or Google Play release notes, with the tone and length adjusted per store. Needs OPENAI_API_KEY.
In practice
What you can ask for.
“Ship an iOS build of Evenly off main and submit it to TestFlight when it goes green.”
ubriot_list_apps · ubriot_trigger_build · ubriot_build_status · ubriot_submit_testflight
“The last Android build failed. What broke and how do I fix it?”
ubriot_list_builds · ubriot_diagnose_failure
“Is this app actually ready to release, or is a credential missing?”
ubriot_app_readiness
“Push a JS-only fix to the production channel, then roll it back if health drops.”
ubriot_publish_ota · ubriot_release_health
“Write App Store and Play release notes from the commits since the last tag.”
ubriot_generate_release_notes
“How long did our iOS builds take last month, and what was the success rate?”
ubriot_build_analytics
the server exposes the tools; your MCP client decides which ones to call
Questions
About the MCP server.
What is the Ubriot MCP server?
It is a Model Context Protocol server published to npm as ubriot-mcp. It exposes 20 Ubriot release tools over stdio, so an MCP client such as Claude Code, Claude Desktop, or Cursor can trigger builds, submit to TestFlight and Google Play, check release health and roll back OTA channels, send push notifications, and diagnose build failures without opening the Ubriot dashboard. Publishing an OTA update itself runs from the ubriot CLI in the app folder.
How do I install it?
Add it to your MCP client config with the command npx and the argument ubriot-mcp@latest, then set UBRIOT_TOKEN to an API key from ubriot.dev/dashboard/api-keys in the server's env block. In Claude Code you can do this in one step with claude mcp add-json -s user ubriot. It needs Node 18 or newer.
Do I need an OpenAI key?
Only for two tools. ubriot_diagnose_failure and ubriot_generate_release_notes call OpenAI and require OPENAI_API_KEY. The other 18 tools talk only to the Ubriot API and work without it.
Can the assistant publish to the App Store without me?
The tools go as far as your Ubriot account can. ubriot_submit_testflight queues a build for TestFlight beta distribution and ubriot_submit_google_play queues an Android build for Google Play. Apple and Google still run their own review, and Ubriot does not bypass it. Whether a tool call needs your approval first is up to your MCP client.
Does it work with self-hosted or staging Ubriot?
Yes. Set UBRIOT_API_BASE to your API base URL. It defaults to https://api.ubriot.dev/api/v1.
Is the MCP server the same thing as the Ubriot CLI?
No. The CLI is for you to run by hand, ubriot ship ios and friends. The MCP server is the machine-readable surface for the same platform, so an AI assistant can pick the right call, read the result, and decide what to do next inside a conversation.
Wire it up to your assistant
Create an account, add your signing credentials once, then install the MCP server and ship the next release from the editor you already have open.
Prefer the terminal? The CLI and API docs cover the same platform.