Skip to main content
Glama

xcode-cloud-mcp (self-owned)

Local Model Context Protocol server so your agents can track Xcode Cloud builds via the App Store Connect API.

It also reads TestFlight beta-feedback crash reports. These are distinct from Xcode Cloud CI failures: they are reports a TestFlight tester explicitly submitted, including the raw crash log for a selected report.

This is your private copy — no third-party Xcode Cloud MCP package. Only well-known dependencies:

Package

Why

@modelcontextprotocol/sdk

MCP stdio server

jose

ES256 JWT for App Store Connect

zod

Tool argument schemas

What agents can do

Tool

Purpose

list_products

Discover Xcode Cloud products

list_apps

Discover App Store Connect apps for TestFlight diagnostics

list_workflows

Workflows for a product

get_workflow

Single workflow details

start_build

Trigger a build (optional git ref)

cancel_build

Cancel an in-flight build

list_build_runs

Recent runs for a workflow

get_build_run

Status snapshot

get_build_actions

Per-action progress (build/test/archive)

wait_for_build

Poll until terminal status or timeout

get_build_issues

Errors / warnings

list_action_artifacts

Logs / result bundles metadata

get_build_logs

Download log text for an action

get_test_results

Tests for an action

get_test_failures

Failed tests across a run

list_beta_feedback_crashes

Privacy-minimized TestFlight crash-report summaries

get_beta_crash_log

Raw log for one selected TestFlight crash report

Typical agent flow

  1. list_productslist_workflows

  2. start_build or list_build_runs for an existing run

  3. wait_for_build / get_build_run + get_build_actions

  4. On failure: get_build_issues, get_test_failures, get_build_logs

TestFlight crash-report flow

  1. list_apps (optionally filter by bundle id)

  2. list_beta_feedback_crashes with the selected appId

  3. get_beta_crash_log for a specific submissionId

The listing intentionally omits tester email and the free-form feedback comment. Raw crash logs are bounded by maxChars (80,000 by default) and should be retrieved only when needed for diagnosis.

Related MCP server: xcode-cloud-mcp

Prerequisites

  • Node.js 20+

  • Apple Developer account with Xcode Cloud

  • App Store Connect API key (Developer or App Manager is usually enough)

Create an API key

  1. App Store ConnectUsers and AccessIntegrationsApp Store Connect API

  2. Generate a key → download the .p8 (once only)

  3. Note Key ID and Issuer ID

Setup

cd ~/Desktop/projects/xcode-cloud-mcp
npm install
npm run build

Copy env template and fill in values:

cp .env.example .env
APP_STORE_KEY_ID=YOUR_KEY_ID
APP_STORE_ISSUER_ID=YOUR_ISSUER_UUID
APP_STORE_PRIVATE_KEY_PATH=/Users/you/path/to/AuthKey_XXXXXXXXXX.p8

Prefer APP_STORE_PRIVATE_KEY_PATH over pasting PEM into config.

Run locally (smoke)

export $(grep -v '^#' .env | xargs)
npm run dev
# process waits on stdio — that's correct for MCP

Quick API check without MCP (optional):

node --import tsx -e '
import { loadConfig } from "./src/config.ts";
import { AppStoreAuth } from "./src/auth.ts";
import { AppStoreConnectClient } from "./src/client.ts";
const c = loadConfig();
const client = new AppStoreConnectClient(c, new AppStoreAuth(c));
const doc = await client.get("/v1/ciProducts", { limit: 5 });
console.log(JSON.stringify(doc, null, 2));
'

Grok config

Add to ~/.grok/config.toml (user scope) or project .grok/config.toml:

[mcp_servers.xcode-cloud]
command = "node"
args = ["/Users/deepanshu/Desktop/projects/xcode-cloud-mcp/dist/index.js"]
startup_timeout_sec = 30
env = {
  APP_STORE_KEY_ID = "YOUR_KEY_ID",
  APP_STORE_ISSUER_ID = "YOUR_ISSUER_UUID",
  APP_STORE_PRIVATE_KEY_PATH = "/Users/deepanshu/Desktop/projects/AuthKey_XXXXXXXXXX.p8"
}

Or via CLI:

grok mcp add xcode-cloud \
  -e APP_STORE_KEY_ID=YOUR_KEY_ID \
  -e APP_STORE_ISSUER_ID=YOUR_ISSUER_UUID \
  -e APP_STORE_PRIVATE_KEY_PATH=/Users/deepanshu/Desktop/projects/AuthKey_XXXXXXXXXX.p8 \
  -- node /Users/deepanshu/Desktop/projects/xcode-cloud-mcp/dist/index.js

Then /mcps → confirm tools, or:

grok mcp doctor xcode-cloud

Cursor

~/.cursor/mcp.json:

{
  "mcpServers": {
    "xcode-cloud": {
      "command": "node",
      "args": ["/Users/deepanshu/Desktop/projects/xcode-cloud-mcp/dist/index.js"],
      "env": {
        "APP_STORE_KEY_ID": "YOUR_KEY_ID",
        "APP_STORE_ISSUER_ID": "YOUR_ISSUER_UUID",
        "APP_STORE_PRIVATE_KEY_PATH": "/Users/deepanshu/Desktop/projects/AuthKey_XXXXXXXXXX.p8"
      }
    }
  }
}

Security

  • Never commit .p8, .env, or keys

  • Restrict key role to the minimum needed

  • Rotate keys if they leak

  • This server speaks only to api.appstoreconnect.apple.com (override only via ASC_API_BASE_URL)

Project layout

src/
  index.ts          # stdio entry
  config.ts         # env loading
  auth.ts           # JWT ES256
  client.ts         # ASC REST client
  types.ts          # CI resource shapes
  format.ts         # tool response helpers
  tools/register.ts # MCP tools

License

Private — for your use only.

A
license - permissive license
-
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

View all related MCP servers

Related MCP Connectors

  • MCP server for Appcircle mobile CI/CD platform.

  • The MCP server for Azure DevOps, bringing the power of Azure DevOps directly to your agents.

  • MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/deeepanshu/xcode-cloud-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server