xcode-cloud-mcp
Local MCP server enabling agents to track Xcode Cloud builds and access TestFlight crash reports through the App Store Connect API.
README
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
list_products→list_workflowsstart_buildorlist_build_runsfor an existing runwait_for_build/get_build_run+get_build_actions- On 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 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 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 tools
License
Private — for your use only.
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.