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+

mcp · ubriot · stdioconnected
$npx ubriot-mcp@latest
ubriot_list_apps3 apps
ubriot_app_readinessios ready
ubriot_trigger_buildbuild #312
ubriot_build_statussucceeded
ubriot_submit_testflightqueued

CLIENTS

Claude · Cursor

AUTH

Token or login

AI TOOLS

2 of 20

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": "eyJ...",
        "OPENAI_API_KEY": "sk-..."
      }
    }
  }
}

Claude Code, one command

Registers the same server at user scope. Swap the email and password for UBRIOT_TOKEN if you already hold a token.

claude mcp add-json -s user ubriot '{
  "command": "npx",
  "args": ["ubriot-mcp@latest"],
  "env": {
    "UBRIOT_EMAIL": "you@example.com",
    "UBRIOT_PASSWORD": "yourpassword"
  }
}'

Environment

UBRIOT_TOKENOne of

A pre-issued Ubriot JWT. Used directly as the bearer token for every API call.

UBRIOT_EMAIL + UBRIOT_PASSWORDOr both

Account credentials. The server logs in on first tool call and caches the token for the session.

UBRIOT_API_BASEOptional

Overrides the API base URL. Defaults to https://api.ubriot.dev/api/v1.

OPENAI_API_KEYAI tools only

Required 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 tools
ubriot_list_apps

Lists every release app in the workspace with its ID, name, slug, and iOS or Android identifiers.

ubriot_create_app

Registers 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_app

Updates an existing app's config, the same fields as creation, by app ID.

ubriot_app_readiness

Returns 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_webhook

Rotates 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.

Builds

6 tools
ubriot_trigger_build

Queues an iOS or Android build for an app, optionally on a specific branch. Returns the build ID and initial status.

ubriot_build_status

Reports a build's status, platform, branch, start and finish times, error message, and any TestFlight or Google Play submission state.

ubriot_build_logs

Fetches the raw logs for a build.

ubriot_list_builds

Lists recent builds across the workspace or for one app, up to a limit that defaults to 20.

ubriot_cancel_build

Requests cancellation of a queued or running build.

ubriot_build_analytics

Aggregates 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 tools
ubriot_submit_testflight

Queues a completed iOS build for TestFlight beta distribution.

ubriot_submit_google_play

Queues a completed Android build for Google Play.

OTA and release health

3 tools
ubriot_publish_ota

Publishes an over-the-air update to a channel, production by default, with an optional description.

ubriot_list_updates

Lists the OTA updates published for an app with channel and date.

ubriot_release_health

One 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 tools
ubriot_send_push

Sends a push notification with a title, body, and optional custom payload to every registered device for an app.

ubriot_list_campaigns

Lists an app's push campaigns with name and status.

Diagnosis and AI

2 tools
ubriot_diagnose_failure

Pulls 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_notes

Turns 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, publish OTA updates, send push notifications, and diagnose build failures without opening the Ubriot dashboard.

How do I install it?

Add it to your MCP client config with the command npx and the argument ubriot-mcp@latest, then set either UBRIOT_TOKEN or both UBRIOT_EMAIL and UBRIOT_PASSWORD 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.

Get started