Home / MCP server

Let Claude drive your releases

AppRelay ships an MCP server, so Claude Code and Claude Desktop can operate your build pipeline directly — read the state of every project, work out what a release would actually do, run the build, and ship it when you say so.

macOS Windows Included — no extra download Node 18+
The short version

Your pipeline, as tools an agent can call

Without it, working with an agent on a release means being the copy-and-paste layer: you run the build, you paste the failure, it suggests a fix, you run it again.

With it, the agent reads the failing run itself — the exact step, the exact exit code — checks whether the tool it blames is even installed, and proposes a fix it can verify by building again. The parts that matter stay yours: nothing reaches a store, a registry or a host without you saying so, in that turn, about that release.

This is the opposite of the Claude features inside AppRelay. Those are buttons in the app that ask Claude for help. This puts AppRelay inside Claude. Use either, both, or neither.

Where the line is

An agent cannot ship by accident

Two tools can publish

Exactly two of the 25 reach the outside world: release, and run_trigger for a trigger whose action is a ship. Both refuse unless called with an explicit confirmation, and release must clear a second --confirm at the CLI behind the bridge — so the deliberate step to publish can't be skipped.

Secrets never leave the vault

No tool returns a secret value. list_secrets answers which fields are filled in, so an agent can tell you a credential is incomplete without ever seeing it. Values are substituted at run time, delivered through the environment rather than the command line, and masked out of everything printed.

Approval-gated channels stay manual

A channel that requires production approval can’t be shipped through the bridge at all. That one only happens in the app, where the approver is recorded against the run.

Everything an agent does is on the record

A build an agent starts takes the same per-folder lock your own runs do, so it can never race a build you kicked off yourself, and it lands in the same run history with the same attribution. Nothing an agent does happens behind your back.

The surface

25 tools, 19 of them read-only

Every tool is annotated, so your client can tell you which ones can change something before it calls them.

Read your workspace

ToolWhat it doesEffect
list_projects Every project, with its toolchains, tags and suite Read-only
project_status One project in full — lanes, recipes, distributions, test suites Read-only
list_groups Suites and tags, so “the whole X suite” resolves to real projects Read-only
doctor Install health, and the two faults that break a headless build Read-only
license_status Your license and plan — what’s active on this machine Read-only

Read a project’s state

ToolWhat it doesEffect
versions The version and build number of every lane Read-only
version_state One lane’s version, its file, and whether that format can be written Read-only
git_status Branch, upstream, ahead/behind and dirty state per repo Read-only
requirements Which required tools are installed, with versions and install hints Read-only
list_recipes The actual shell steps behind build, run and ship Read-only
list_environments Deploy environments — variables in full, secrets by name only Read-only
list_secrets Which credential fields are filled in. Never a value Read-only
list_targets The simulators, devices and emulators you can run on right now Read-only

Read what shipping would do

ToolWhat it doesEffect
channels Where a lane ships, what’s live there, and what already went out Read-only
deployments Deploy history — version, when, by whom, health, artifact Read-only
rollback_plan Whether a channel can be rolled back, and what that would take Read-only
runs Recent runs across every project, newest first Read-only
run_log One run in full — every step, its exit code, and where it stopped Read-only
list_triggers The triggers you have configured Read-only

Do something on your machine

ToolWhat it doesEffect
bump_version Write a new version to the lane’s version file Runs here
build Build a lane Runs here
run Build a lane and launch it, optionally on a chosen device Runs here
run_tests Run a project’s test suites Runs here

Reach the outside world

ToolWhat it doesEffect
run_trigger Fire a configured trigger now Needs confirmation
release Ship a lane to a distribution channel Needs confirmation

Anywhere a project is named, an agent can use its slug, its id, its exact name, or its position in the list. Lanes work the same way, by label or position. A release can also name a deployment environment, so it ships against Staging or Production with that environment’s variables and secrets.

Built-in workflows

Four commands that already know the order

The bridge ships prompts as well as tools. Your client surfaces them as slash commands, with your own project and lane names auto-completing as you type.

/release

Walks a project from its current state to a shipped release — checks first, then bump, build, test, and ship on your say-so.

/readiness

A read-only pre-release audit: everything that would block or spoil a release, with nothing run and nothing changed.

/diagnose

Reads the run log, finds the step that actually failed, and works out why.

/whats_live

What is currently deployed across your projects, and anything stale or unhealthy.

Setup

One line, because it ships inside the app

Install AppRelay and the bridge is already on disk. There is nothing to download, nothing to configure, and no path to keep in step with your install.

macOS · Claude Code
claude mcp add apprelay -- node \
  "/Applications/AppRelay.app/Contents/Resources/apprelay-mcp.mjs"
Windows · Claude Code
claude mcp add apprelay -- node ^
  "C:\Program Files\AppRelay\apprelay-mcp.mjs"

For Claude Desktop, add the same path to mcpServers in claude_desktop_config.json and restart the app — the full snippet is in the documentation. Installed AppRelay somewhere non-standard? Set APPRELAY_BIN to the binary and the bridge uses that ahead of everything else. If it can’t find AppRelay at all it says so, listing every path it tried, rather than failing mysteriously.

Download AppRelay Read the docs
Not using an agent?

The same surface, as a plain CLI

The bridge is a thin wrapper over a headless command line built into the app itself. It reads the same workspace, prints JSON, and is just as happy in a shell script or a CI job as behind an agent.

$ apprelay channels hydrants-ios
{
  "project": "hydrants-ios",
  "lane": "iOS",
  "version": "2.4.1",
  "channels": [
    {
      "channel": "appStoreConnect",
      "liveVersion": "2.4.1",
      "currentVersionShipped": true,
      "reversible": false,
      "requiresApproval": false
    }
  ]
}

Every read command prints JSON; every action command streams its output and exits non-zero on failure. The full command list is in the docs.

Questions

Before you point an agent at your pipeline

Do I need to install anything extra?
No. The bridge ships inside the AppRelay app on both macOS and Windows, so it is already on disk once AppRelay is installed. You need Node.js 18 or newer (which most developer machines already have) and an MCP client — Claude Code or Claude Desktop.
Does AppRelay have to be running?
No. The bridge starts the app in headless mode for each call and it exits when the call finishes. If AppRelay is open, that is fine too — a build started from an agent takes the same per-folder lock the desktop uses, so the two can never run over each other.
Can an agent ship a release without asking me?
No. The two tools that reach the outside world — release and run_trigger — refuse to run unless they are called with an explicit confirmation, and the app demands that confirmation a second time behind the bridge. A channel that requires production approval cannot be shipped this way at all; that one only happens in the app, where the approver is recorded.
Can the agent see my signing keys and API tokens?
No tool returns a secret value, on any path. list_secrets reports only which credential fields have been filled in, so an agent can tell you the App Store Connect key is missing without ever seeing one. Secrets are substituted into commands at run time and masked out of everything printed.
Does this send my code anywhere?
The bridge itself uploads nothing — it runs a local command and hands back its output. But whatever the agent reads becomes part of your conversation with it, under your own account, exactly like a file you paste in. Build logs, project names, versions, and git status are the kinds of things it will read.
Does it work with tools other than Claude?
It speaks the Model Context Protocol over stdio, so any MCP-compatible client can use it. Claude Code and Claude Desktop are the two we test against.