xcode-cloud-mcp
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 |
| MCP stdio server |
| ES256 JWT for App Store Connect |
| Tool argument schemas |
What agents can do
Tool | Purpose |
| Discover Xcode Cloud products |
| Discover App Store Connect apps for TestFlight diagnostics |
| Workflows for a product |
| Single workflow details |
| Trigger a build (optional git ref) |
| Cancel an in-flight build |
| Recent runs for a workflow |
| Status snapshot |
| Per-action progress (build/test/archive) |
| Poll until terminal status or timeout |
| Errors / warnings |
| Logs / result bundles metadata |
| Download log text for an action |
| Tests for an action |
| Failed tests across a run |
| Privacy-minimized TestFlight crash-report summaries |
| Raw log for one selected TestFlight crash report |
Typical agent flow
list_products→list_workflowsstart_buildorlist_build_runsfor an existing runwait_for_build/get_build_run+get_build_actionsOn failure:
get_build_issues,get_test_failures,get_build_logs
TestFlight crash-report flow
list_apps(optionally filter by bundle id)list_beta_feedback_crasheswith the selectedappIdget_beta_crash_logfor a specificsubmissionId
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.
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
App Store Connect → Users and Access → Integrations → App Store Connect API
Generate a key → download the
.p8(once only)Note Key ID and Issuer ID
Setup
cd ~/Desktop/projects/xcode-cloud-mcp
npm install
npm run buildCopy env template and fill in values:
cp .env.example .envAPP_STORE_KEY_ID=YOUR_KEY_ID
APP_STORE_ISSUER_ID=YOUR_ISSUER_UUID
APP_STORE_PRIVATE_KEY_PATH=/Users/you/path/to/AuthKey_XXXXXXXXXX.p8Prefer 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 MCPQuick 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.jsThen /mcps → confirm tools, or:
grok mcp doctor xcode-cloudCursor
~/.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 keysRestrict key role to the minimum needed
Rotate keys if they leak
This server speaks only to
api.appstoreconnect.apple.com(override only viaASC_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 toolsLicense
Private — for your use only.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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