loading…
Search for a command to run...
loading…
Enables AI assistants to access TestFlight beta tester feedback, including screenshots, crash logs, and text comments from App Store Connect. It works across an
Enables AI assistants to access TestFlight beta tester feedback, including screenshots, crash logs, and text comments from App Store Connect. It works across any platform without requiring Xcode, using official API keys and optional browser automation for full text feedback.
An MCP (Model Context Protocol) server that gives AI assistants access to TestFlight beta tester feedback from App Store Connect. No Xcode required.
Apple doesn't expose TestFlight feedback text/comments via their public API (fastlane discussion). This MCP server provides:
| Tool | Description |
|---|---|
list_apps |
List all apps in your App Store Connect account |
list_builds |
List TestFlight builds (filter by version, status) |
list_beta_testers |
List beta testers (filter by app, group, email) |
list_beta_groups |
List beta tester groups for an app |
list_feedback |
List all feedback: screenshots, crashes, and text comments |
get_feedback_detail |
Get full details for a specific feedback submission |
get_crash_log |
Download crash log content for a crash submission |
respond_to_feedback |
Email a tester that their feedback has been addressed |
.p8 file (you can only download it once)cd testflight-feedback-mcp
npm install
npm run build
Set environment variables or create a .env file:
ASC_KEY_ID=YOUR_KEY_ID
ASC_ISSUER_ID=YOUR_ISSUER_ID
ASC_PRIVATE_KEY_PATH=./AuthKey_XXXXXXXX.p8
Or provide the key inline:
ASC_PRIVATE_KEY="-----BEGIN PRIVATE KEY-----\nMIGT...your key...\n-----END PRIVATE KEY-----"
Add to claude_desktop_config.json:
{
"mcpServers": {
"testflight-feedback": {
"command": "node",
"args": ["/absolute/path/to/testflight-feedback-mcp/dist/index.js"],
"env": {
"ASC_KEY_ID": "YOUR_KEY_ID",
"ASC_ISSUER_ID": "YOUR_ISSUER_ID",
"ASC_PRIVATE_KEY_PATH": "/path/to/AuthKey.p8"
}
}
}
}
Add to .cursor/mcp.json:
{
"mcpServers": {
"testflight-feedback": {
"command": "node",
"args": ["/absolute/path/to/testflight-feedback-mcp/dist/index.js"],
"env": {
"ASC_KEY_ID": "YOUR_KEY_ID",
"ASC_ISSUER_ID": "YOUR_ISSUER_ID",
"ASC_PRIVATE_KEY_PATH": "/path/to/AuthKey.p8"
}
}
}
}
Add to .vscode/mcp.json:
{
"servers": {
"testflight-feedback": {
"command": "node",
"args": ["/absolute/path/to/testflight-feedback-mcp/dist/index.js"],
"env": {
"ASC_KEY_ID": "YOUR_KEY_ID",
"ASC_ISSUER_ID": "YOUR_ISSUER_ID",
"ASC_PRIVATE_KEY_PATH": "/path/to/AuthKey.p8"
}
}
}
}
The respond_to_feedback tool looks up the tester's email from a feedback submission and sends them a response. Configure any SMTP provider:
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
[email protected]
SMTP_PASS=your-app-password # Use App Password for Gmail
[email protected] # Optional, defaults to SMTP_USER
APP_NAME=My App # Shows in the email footer
Works with Gmail, Outlook, custom SMTP, etc. The tool:
Apple's public API only returns screenshot and crash submissions — not text comments. To access text feedback, enable Playwright-based browser authentication:
npm install playwright
npx playwright install chromium
# Add to your env:
ENABLE_BROWSER_AUTH=true
[email protected]
ASC_PASSWORD=your-password
Note: This uses Apple's internal
iris/v1/betaFeedbacksAPI. You may be prompted for 2FA on your Apple device. Session cookies are cached in memory for the server lifetime.
Once connected, ask your AI assistant:
src/
├── index.ts # MCP server entry point, tool registration
├── auth/
│ ├── jwt.ts # JWT token generation (ES256, .p8 key)
│ └── browser.ts # Optional Playwright session for iris API
├── api/
│ ├── client.ts # HTTP client with JWT auth & pagination
│ ├── types.ts # TypeScript types for API responses
│ ├── apps.ts # /v1/apps endpoints
│ ├── builds.ts # /v1/builds endpoints
│ ├── testers.ts # /v1/betaTesters, /v1/betaGroups
│ └── feedback.ts # Screenshot/crash/iris feedback endpoints
└── tools/
├── list-apps.ts
├── list-builds.ts
├── list-testers.ts
├── list-feedback.ts
├── get-feedback-detail.ts
└── get-crash-log.ts
| Endpoint | Auth | Status |
|---|---|---|
/v1/apps |
JWT | ✅ |
/v1/builds |
JWT | ✅ |
/v1/betaTesters |
JWT | ✅ |
/v1/betaGroups |
JWT | ✅ |
/v1/betaFeedbackScreenshotSubmissions |
JWT | ✅ |
/v1/betaFeedbackCrashSubmissions |
JWT | ✅ |
/iris/v1/betaFeedbacks (text comments) |
Browser | ✅ (optional) |
MIT
Добавь это в claude_desktop_config.json и перезапусти Claude Desktop.
{
"mcpServers": {
"testflight-feedback-mcp-server": {
"command": "npx",
"args": []
}
}
}