testflight-mcp
Provides tools for interacting with the App Store Connect API, enabling management of TestFlight feedback, apps, builds, beta testers/groups, analytics, sales reports, provisioning, and app metadata.
Allows access to App Store Connect features including listing apps, builds, customer reviews, app store versions, and localizations.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@testflight-mcpshow me recent screenshot feedback for my app"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
testflight-mcp
MCP server for TestFlight and App Store Connect that exposes the App Store Connect API as tools for AI agents.
Its focus is TestFlight beta feedback retrieval — pulling the screenshot feedback (with the tester's comment), crash feedback and crash logs your testers submit — plus the surrounding context an agent needs to make sense of it: apps, builds, beta testers/groups, analytics & sales reports, provisioning, and App Store metadata. It talks only to the official, documented API using a standard App Store Connect API key (ES256 JWT), and is read-only.
It deliberately does not scrape App Store Connect with your Apple ID / password (no headless browser, no internal
irisAPI) and does not send email to testers. Some third-party TestFlight servers do; this one stays on the supported API.
Install
The package is published as
@orellbuehler/testflight-mcp and runs
directly with npx — no clone or build needed:
claude mcp add testflight \
--env ASC_KEY_ID=ABCD123456 \
--env ASC_ISSUER_ID=12a3b456-7890-1234-5678-9abcdef01234 \
--env ASC_PRIVATE_KEY_PATH=/path/to/AuthKey_ABCD123456.p8 \
-- npx -y @orellbuehler/testflight-mcpFor any other MCP client, run the package directly — npx -y @orellbuehler/testflight-mcp with the
env vars below set. Requires Node.js 20+.
Related MCP server: xcode-cloud-mcp
Getting an API key
The server authenticates with an App Store Connect API key (a .p8 file plus a key ID and issuer
ID), the same credentials fastlane/altool use:
In App Store Connect, go to Users and Access → Integrations → App Store Connect API (Team Keys).
Generate a key. A role of App Manager (or Admin) covers TestFlight feedback; Finance is additionally required for sales/finance reports.
Download the
AuthKey_XXXXXXXXXX.p8(you can only download it once — keep it safe), and note the Key ID and the team Issuer ID shown above the keys table.
Provide the key either as a file path (ASC_PRIVATE_KEY_PATH) or inline (ASC_PRIVATE_KEY, newlines
may be escaped as \n). The key is read locally and used only to sign short-lived request tokens.
Configuration
Variable | Required | Description |
| yes | App Store Connect API Key ID. |
| yes | App Store Connect API Issuer ID (per team). |
| yes* | Path to the downloaded |
| yes* | The |
| no | Vendor number; required only for |
* Provide either ASC_PRIVATE_KEY_PATH or ASC_PRIVATE_KEY.
Usage with Claude Code
Add the server to ~/.claude/settings.json (or a project .mcp.json):
{
"mcpServers": {
"testflight": {
"command": "npx",
"args": ["-y", "@orellbuehler/testflight-mcp"],
"env": {
"ASC_KEY_ID": "ABCD123456",
"ASC_ISSUER_ID": "12a3b456-7890-1234-5678-9abcdef01234",
"ASC_PRIVATE_KEY_PATH": "/path/to/AuthKey_ABCD123456.p8"
}
}
}
}If you built from source instead, use "command": "node" with
"args": ["/path/to/testflight-mcp/dist/index.js"]. Restart Claude Code and verify with
claude mcp list (should show testflight ✓ connected) or /mcp inside a session.
Example prompts
Once connected, ask the agent things like:
"List the latest TestFlight screenshot feedback for my app and summarize the recurring complaints."
"Show crash feedback for build 1.4.0 and download the crash log for the most recent one."
"Which beta testers reported feedback this week, and what devices/OS versions were they on?"
"Why can't my external testers see build 1.4.0 yet?"
"How many installs and crashes does the latest build have, and what's the crash rate?"
"Where is version 1.4.0 in App Review, and is anything blocking it?"
"What's the top hang signature in the latest build?"
"The last Xcode Cloud build failed — what were the errors?"
"Pull this month's sales summary as CSV."
Tools
Start from list_apps to get an app_id, then drill into feedback. All tools are read-only.
TestFlight feedback
Tool | Description |
| Screenshot feedback for an app: tester comment, screenshot URLs, device/OS, resolved tester and build (build number |
| Crash feedback for an app: comment, device/OS, resolved tester and build (build number + TestFlight version |
| One screenshot submission; optionally returns the first screenshot inline as an image. |
| One crash submission with full metadata and crash-log reference. |
| Download the crash log text for a crash submission. |
Apps & builds
Tool | Description |
| Apps in the account (id, name, bundleId, sku). Filter by bundle ID. |
| One app by ID. |
| TestFlight builds for an app (version, processing state, expiry) with their TestFlight beta state. |
| One build with its pre-release version and beta state. |
| Public App Store reviews for a released app, with your published response. Distinct from beta feedback. |
TestFlight build status & metrics
Tool | Description |
| Why a build is (not) available to testers: internal/external build state, beta review state, and "What to Test" per locale. |
| Installs, sessions, crashes, invites and feedback counts for a build. |
| Tester engagement (sessions, crashes, feedback) per tester, for an app or a beta group. |
| Tester-facing TestFlight metadata (beta description, feedback email, privacy URL). |
| Beta App Review contact, demo-account requirement and review notes. |
Beta testers & groups
Tool | Description |
| Beta groups for an app (internal/external, public link, feedback enabled). |
| Beta testers (name, email, invite type, state). Filter by app/group/email. |
| Testers in a specific beta group. |
Analytics & reports
Tool | Description |
| Request an analytics report (the required first step). Returns a request ID. |
| Reports available for a request, optionally filtered by category. |
| Downloadable segments of a report (presigned URLs). |
| Download + decompress a segment to CSV/TSV text (url must come from |
| Sales & Trends report as CSV (needs |
| Financial report as CSV (needs |
Provisioning & devices
Tool | Description |
| Registered devices (name, platform, UDID, status). |
| Signing certificates (type, name, serial, expiry). |
| Provisioning profiles with their bundle ID. |
| Registered bundle IDs (identifier, name, platform). |
App metadata & localizations
Tool | Description |
| App Store versions for an app (version, platform, state). |
| Per-locale metadata (description, keywords, what's new, URLs). |
| One localization by ID. |
App Review pipeline
Tool | Description |
| What is in App Review and its state, with the version under review and the submitted items. |
| One call for a version's release status: attached build, submission, phased release, review contact/notes. |
Performance & diagnostics
Tool | Description |
| MetricKit metrics for an app's recent versions or one build (launch, hang, memory, disk, battery) plus regression insights. |
| Grouped disk-write / hang / launch problems for a build, weighted, with Apple's insight. |
| Logs for a signature; call stacks are stripped unless |
Xcode Cloud
Tool | Description |
| Xcode Cloud products, optionally filtered by app. |
| Build runs for a product or workflow (number, status, commit, branch/PR). |
| The actions of a build run (build, test, analyze, archive) with their status. |
| Errors, warnings and test failures for a build action — what to read when CI fails. |
| Artifacts of a build action (logs, archives, test results) with download URLs. |
Notes & caveats
Read-only. The server cannot add/remove testers, edit metadata, or submit apps. The only
POSTiscreate_analytics_report_request, which requests an analytics snapshot so the data can be read; it does not change your app.TestFlight feedback requires builds uploaded with feedback enabled and is retained by Apple for a limited window (~90 days). The tester's typed comment is the
commentfield on a screenshot submission.Crash logs are resolved from the submission's crash-log URL and downloaded as text. If Apple exposes no download URL for a given submission,
get_crash_logreturns the raw attributes so you can see what's available.Reports (
download_sales_report/download_finance_report) are gzipped CSV decompressed for you, and need the Finance role on the API key plusASC_VENDOR_NUMBER.Power & performance data (
get_perf_power_metrics,list_diagnostic_signatures,get_diagnostic_logs) is aggregated MetricKit data from devices whose owners opted in to sharing analytics, is iOS-only, and is empty for apps with too little usage to anonymize.Demo account passwords are never requested:
get_beta_app_review_detailandget_app_store_version_statusdeliberately omit thedemoAccountPasswordfield.Your data goes to the agent/LLM. Feedback includes tester names, emails and device details. Use an API key scoped to the access you actually want.
Development
npm install
npm run build # tsc -> dist/
npm test # vitest run
npm run typecheck # tsc --noEmit
npm run lint # eslint src
npm run format:check # prettier --check .Run a single test file:
npx vitest run src/__tests__/feedback.test.tsCI / Releasing
CI (
.github/workflows/ci.yml) runs on every push tomainand on pull requests:format:check,lint,typecheck(once) andtest+buildon Node 20 and 22.Publish (
.github/workflows/publish.yml) runs when a GitHub Release is published. It builds, tests, and publishes to npm using trusted publishing (OIDC) — noNPM_TOKENsecret required, with provenance generated automatically. It skips publishing if that version is already on npm.
Cut a release:
npm version patch # bumps package.json + creates a vX.Y.Z tag (use minor/major as needed)
git push --follow-tags
gh release create "v$(node -p "require('./package.json').version")" --generate-notesLicense
MIT © Orell Bühler
Maintenance
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
- AlicenseNot gradedqualityAmaintenanceMCP server for App Store Connect API with 208 tools across 25 workers. Manage apps, builds, TestFlight, in-app purchases, subscriptions, reviews, provisioning, screenshots, analytics, and more — directly from Claude, Cursor, VS Code, or any MCP client. Multi-account support, worker filtering, JWT auth.62MIT
- AlicenseBqualityAmaintenanceMCP server for managing Xcode Cloud workflows, builds, and test artifacts via the App Store Connect API.15101MIT
- AlicenseNot gradedqualityAmaintenanceA Model Context Protocol server that exposes the entire Apple App Store Connect API (1,200+ operations) as MCP tools, enabling AI assistants to query apps, manage builds, handle submissions, read analytics, and more.21MIT
- AlicenseNot gradedqualityBmaintenanceMCP server that exposes App Store Connect TestFlight beta feedback including screenshot submissions, crash submissions, crash logs, and screenshot downloads as tools for MCP-capable clients.2BSD 3-Clause
Related MCP Connectors
MCP server exposing the Backtest360 engine API as tools for AI agents.
MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.
MCP server for secureFlows: token-free URL builders and integration-linting tools for AI agents.
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/OrellBuehler/testflight-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server