TestFlight Feedback MCP Server
Click on "Deploy 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 Feedback MCP ServerSummarize the latest TestFlight feedback and crash reports"
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 Feedback MCP Server
An MCP (Model Context Protocol) server that gives AI assistants access to TestFlight beta tester feedback from App Store Connect. No Xcode required.
Why?
Apple doesn't expose TestFlight feedback text/comments via their public API (fastlane discussion). This MCP server provides:
Official API access to screenshot & crash feedback submissions (JWT auth)
Optional browser automation for full text feedback via Apple's internal iris API (Playwright)
Works on any platform — Windows, Linux, macOS — no Xcode needed
Related MCP server: App Store Connect MCP Server
Tools
Tool | Description |
| List all apps in your App Store Connect account |
| List TestFlight builds (filter by version, status) |
| List beta testers (filter by app, group, email) |
| List beta tester groups for an app |
| List all feedback: screenshots, crashes, and text comments |
| Get full details for a specific feedback submission |
| Download crash log content for a crash submission |
| Email a tester that their feedback has been addressed |
Setup
1. Get App Store Connect API Keys
Click Generate API Key (requires Admin role)
Download the
.p8file (you can only download it once)Note the Key ID and Issuer ID
2. Install
cd testflight-feedback-mcp
npm install
npm run build3. Configure
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.p8Or provide the key inline:
ASC_PRIVATE_KEY="-----BEGIN PRIVATE KEY-----\nMIGT...your key...\n-----END PRIVATE KEY-----"4. Connect to Your AI Assistant
Claude Desktop
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"
}
}
}
}Cursor
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"
}
}
}
}VS Code + GitHub Copilot
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"
}
}
}
}Optional: Respond to Testers via Email (SMTP)
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
SMTP_USER=your-email@gmail.com
SMTP_PASS=your-app-password # Use App Password for Gmail
SMTP_FROM=your-email@gmail.com # Optional, defaults to SMTP_USER
APP_NAME=My App # Shows in the email footerWorks with Gmail, Outlook, custom SMTP, etc. The tool:
Fetches the submission to get the tester's email + build version
Sends a nicely formatted HTML email with your message
Returns confirmation with tester name, email, and message ID
Optional: Full Text Feedback (Browser Auth)
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
ASC_USERNAME=your@apple.id
ASC_PASSWORD=your-passwordNote: 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.
Example Usage
Once connected, ask your AI assistant:
"Show me the latest TestFlight feedback for my app"
"List all crash reports from the last build"
"Get the crash log for submission XYZ"
"Who are my beta testers?"
"Show feedback from build 1.2.0"
Architecture
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.tsAPI Coverage
Endpoint | Auth | Status |
| JWT | ✅ |
| JWT | ✅ |
| JWT | ✅ |
| JWT | ✅ |
| JWT | ✅ |
| JWT | ✅ |
| Browser | ✅ (optional) |
License
MIT
Available Tools
8 toolsget_crash_logA
Download the crash log content for a specific beta feedback crash submission.
| Name | Required | Description | Default |
|---|---|---|---|
| crash_submission_id | Yes | The beta feedback crash submission ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It indicates a read/download operation but does not disclose output format, authentication needs, or potential side effects. For a simple download, this is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, no redundant words, perfect structure for a simple tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with one required parameter and no output schema, the description covers the core behavior. However, omitting output format (e.g., plain text) or error conditions slightly reduces completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with parameter description 'The beta feedback crash submission ID'. The tool description adds little beyond that, just rephrasing. Baseline 3 is appropriate as no additional semantic value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Download', the resource 'crash log content', and the context 'for a specific beta feedback crash submission'. It distinguishes from sibling tools like get_feedback_detail, which likely returns feedback details rather than crash logs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives (e.g., get_feedback_detail). It does not mention prerequisites or scenarios where it should not be used.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_feedback_detailA
Get detailed information about a specific feedback submission, including device info, tester details, screenshot asset, or crash log reference.
| Name | Required | Description | Default |
|---|---|---|---|
| submission_id | Yes | The feedback submission ID | |
| type | Yes | Type of feedback submission |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It reveals that the tool returns details contingent on the 'type' parameter (screenshot asset or crash log reference), but it does not disclose permissions, rate limits, or the exact structure of the response. Given the conditional nature implied by the enum, more explicit behavioral notes would be beneficial.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single 16-word sentence that immediately states the verb and resource, then lists included items. There is no wasted text, and it is well-structured for quick parsing by an AI agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description reasonably covers the return content (device info, tester details, screenshot or crash reference). While it does not detail the exact structure or nesting, the tool's low parameter count and simple purpose make the description sufficiently complete for most usage scenarios.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, and the description adds value by explaining that the 'type' parameter determines whether the response includes a screenshot asset or crash log reference. This linkage between parameters and return content goes beyond the schema's bare descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the verb 'Get' and the resource 'detailed information about a specific feedback submission', listing specific content like device info, tester details, screenshot asset, or crash log reference. This clearly distinguishes it from sibling tools like list_feedback (lists summaries) and get_crash_log (standalone crash log retrieval).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description indicates this tool is used for obtaining detailed info on a single feedback submission, implying it is suitable after a list operation. While it does not explicitly state when not to use it or mention alternatives, the purpose is clear enough for an agent to infer appropriate usage from the sibling context (e.g., use list_feedback first, then this).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_appsB
List all apps in your App Store Connect account. Returns app ID, name, bundle ID, and SKU.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of apps to return (default: 50) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It claims to 'list all apps' but the limit parameter (default 50, max 200) implies it may not return all apps. This contradiction and lack of pagination details reduce transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with two sentences: one for action and one for return fields. Every word adds value, and the structure is front-loaded with the primary purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While the description states the return fields, it omits details about the limit parameter and pagination behavior. For a simple tool without an output schema, this is adequate but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage for the limit parameter, so the baseline is 3. The description does not add any additional meaning to the parameter beyond the schema, thus earning the baseline score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'List' and the resource 'apps in your App Store Connect account', and distinguishes it from sibling tools like list_beta_groups and list_builds. It also specifies the return fields (app ID, name, bundle ID, SKU), making the purpose very clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives, such as when to use list_builds for app-specific builds. There is no mention of prerequisites, filtering, or limitations like pagination.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_beta_groupsB
List beta tester groups for an app. Returns group name, internal/external status, and feedback settings.
| Name | Required | Description | Default |
|---|---|---|---|
| app_id | Yes | App Store Connect app ID | |
| limit | No | Maximum number of groups to return (default: 50) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are absent, and the description does not disclose behavioral traits such as idempotency, rate limits, or side effects. The tool appears to be a read operation, but this is not explicitly stated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is a single concise sentence with no redundant information. It is front-loaded with the main action and result.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema is provided, and the description only briefly mentions return fields. Lacks details on pagination, sorting, or other behaviors that might be needed given the absence of annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameters are adequately described in the schema. The description adds value by mentioning what the response includes, but this is not necessary for parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists beta tester groups for an app and specifies the returned information (group name, status, feedback settings). It distinguishes from siblings like list_beta_testers or list_apps.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like list_beta_testers or list_feedback. The description does not provide context for choosing this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_beta_testersA
List beta testers. Filter by app, group, or email. Returns tester name, email, invite type, and state.
| Name | Required | Description | Default |
|---|---|---|---|
| app_id | No | Filter testers by app ID | |
| group_id | No | Filter testers by beta group ID | |
| No | Filter by tester email address | ||
| limit | No | Maximum number of testers to return (default: 50) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It correctly indicates a read-only list operation and describes returned fields, but it omits details like pagination, sorting, or potential side effects. Adequate but not thorough.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no redundant information. Every phrase adds value: action, filters, and output fields.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers core purpose and filters but lacks details on default limit, pagination, or ordering. With 4 optional parameters and no output schema, more context (e.g., 'returns up to 50 testers by default') would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 100% description coverage, each parameter is documented. The description adds that the tool returns specific fields, but does not enrich parameter meaning beyond the schema. Baseline score applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists beta testers and specifies filter options (app, group, email) and return fields (name, email, invite type, state). This differentiates it from sibling tools like list_beta_groups.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description lists filter parameters and implies when to use (listing testers with optional filters). It does not explicitly exclude alternatives, but the context is clear and sufficient for a list operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_buildsA
List TestFlight builds for an app. Filter by version or processing state. Returns build number, version, upload date, and status.
| Name | Required | Description | Default |
|---|---|---|---|
| app_id | Yes | App Store Connect app ID | |
| version | No | Filter by pre-release version string (e.g., '1.2.0') | |
| processing_state | No | Filter by build processing state | |
| limit | No | Maximum number of builds to return (default: 20) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden. It specifies return fields (build number, version, upload date, status) and filtering, but lacks details on pagination, sorting, or side effects. It does not explicitly declare the tool as read-only.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences totaling 16 words, front-loaded with the core purpose, followed by filtering and return values. Every sentence is essential and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and 4 parameters, the description covers the main purpose and return fields. It omits details about the limit parameter's default and error handling, but is largely adequate for a simple list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description adds value by summarizing the filtering ('Filter by version or processing state') and listing the return fields, which are not in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('List'), resource ('TestFlight builds'), and scope ('for an app'). It also mentions filtering capabilities, and the tool's purpose is distinct from siblings like list_apps or list_beta_groups.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool (to list builds), but it does not explicitly state when not to use it or provide alternatives. No exclusions or context versus other list tools is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_feedbackA
List TestFlight feedback for an app. Retrieves screenshot submissions, crash reports, and (with browser auth) text comments. Filter by build or feedback type.
| Name | Required | Description | Default |
|---|---|---|---|
| app_id | Yes | App Store Connect app ID | |
| build_id | No | Filter feedback by build ID | |
| type | No | Type of feedback to retrieve. 'comments' requires browser auth. Default: 'all' | |
| limit | No | Maximum number of feedback items per type (default: 50) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses that comments require browser auth, which is valuable. However, it does not explain pagination behavior, rate limits, or whether the operation is read-only (assumed but unstated). Gaps remain in behavioral expectations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the main purpose followed by retrieval specifics and filtering options. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has no output schema and the description does not describe the return format or behavior when no results are found. Given the complexity (4 parameters, list tool), additional context on pagination or response structure would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage with descriptions. The description's mention of filtering by build or type reinforces the schema but does not add new meaning beyond what is already in the parameter descriptions. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists TestFlight feedback for an app, specifying the types (screenshots, crashes, comments) and the auth requirement for comments. It distinguishes itself from sibling tools like get_crash_log (specific crash) and get_feedback_detail (single feedback).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions filtering by build or feedback type, giving clear usage context. However, it does not explicitly state when to avoid this tool in favor of siblings (e.g., for detailed feedback or responding). The absence of exclusions leaves some ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
respond_to_feedbackA
Send an email to a beta tester letting them know their feedback has been addressed. Looks up the tester's email from the submission and sends via SMTP.
| Name | Required | Description | Default |
|---|---|---|---|
| submission_id | Yes | The feedback submission ID to respond to | |
| submission_type | Yes | Type of feedback submission | |
| message | Yes | The response message to send to the tester (e.g., 'We fixed the crash you reported in build 1.2.1') | |
| subject | No | Custom email subject line. Defaults to 'Your TestFlight feedback has been addressed' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden. It explains the mechanism (lookup email, send SMTP) but omits side effects, error states, and authorization requirements. Partial transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the key action, no extraneous information. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description explains the core process and covers the main purpose, but lacks detail on return value (success/failure), error handling, and why submission_type is needed. Still largely complete for a simple tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and parameter descriptions are adequate. The description adds no new meaning beyond what the schema already provides for individual parameters, so baseline score applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Send an email') and the resource ('beta tester feedback'), distinguishing it from sibling tools that retrieve or list data. The verb+resource is specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage (responding to feedback) but provides no explicit guidance on when not to use it, prerequisites, or alternatives. The agent must infer usage from the action and schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
8 tool updates
v1.0.0- First observed
get_crash_log - First observed
get_feedback_detail - First observed
list_apps - First observed
list_beta_groups - First observed
list_beta_testers - First observed
list_builds - First observed
list_feedback - First observed
respond_to_feedback
TDQS
Scored across 8 tools
Each tool targets a distinct resource or action (apps, groups, testers, builds, feedback, crash logs, and responses). Even the two feedback-related tools have clear separation: list_feedback retrieves items, get_feedback_detail provides in-depth detail, and get_crash_log downloads specific crash content.
All tool names follow a consistent verb_noun pattern using lowercase with underscores (e.g., list_apps, get_feedback_detail, respond_to_feedback). This makes the set predictable for an agent to learn and select tools.
8 tools is well-scoped for a TestFlight feedback MCP. Each tool serves a necessary function without redundancy, covering the essential workflows: listing resources, retrieving details, downloading crash logs, and responding to feedback.
The tool set covers the core TestFlight feedback lifecycle: listing apps/groups/testers/builds/feedback, retrieving detailed info and crash logs, and responding. Minor gaps exist, such as the ability to delete feedback or manage beta tester invitations, but these are not critical for the stated purpose.
Maintenance
Related MCP Connectors
- app-managerOAuthapp.lance
App Store Connect operator for AI agents: icons, TestFlight builds, listings, IAP, rejection fixes.
Run App Store Connect from your IDE: pricing, listings, screenshots, releases, AI visibility.
Direct access to Cypress tests results and accessibility reports in your AI workflow.
ASO analytics and App Store optimization tools for indie iOS developers and AI agents.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to manage Apple App Store Connect through the official API, including apps, metadata, reviews, TestFlight, provisioning, users, and reports.MIT
- AlicenseAqualityCmaintenanceEnables AI assistants to manage Apple App Store Connect resources like apps, builds, TestFlight, and reviews through natural language.207MIT
- AlicenseBqualityAmaintenanceMCP server for TestFlight and App Store Connect that exposes the App Store Connect API as tools for AI agents, focusing on retrieving beta feedback (screenshots, crash logs) and related app/build/tester data, with read-only operations.41201MIT
- AlicenseCqualityCmaintenanceEnables management of App Store Connect resources including app reviews, TestFlight crashes, analytics reports, and Xcode Cloud workflows through natural language or AI agents.401MIT