get_beta_feedback_screenshot
Retrieve beta feedback screenshots from App Store Connect to analyze tester submissions and improve app quality during development.
Instructions
Get detailed information about a specific beta feedback screenshot submission. By default, downloads and returns the screenshot image.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| feedbackId | Yes | The ID of the beta feedback screenshot submission | |
| includeBuilds | No | Include build information in response (optional) | |
| includeTesters | No | Include tester information in response (optional) | |
| downloadScreenshot | No | Download and return the screenshot as an image (default: true) |
Implementation Reference
- src/handlers/beta.ts:172-246 (handler)Core handler function that retrieves a specific beta feedback screenshot submission from App Store Connect API. Fetches metadata, optionally includes related data, and downloads the screenshot image as base64 for MCP content response.async getBetaFeedbackScreenshot(args: { feedbackId: string; includeBuilds?: boolean; includeTesters?: boolean; downloadScreenshot?: boolean; }): Promise<BetaFeedbackScreenshotSubmissionResponse | any> { const { feedbackId, includeBuilds = false, includeTesters = false, downloadScreenshot = true } = args; if (!feedbackId) { throw new Error('feedbackId is required'); } const params: Record<string, any> = {}; // Add includes if requested const includes: string[] = []; if (includeBuilds) includes.push('build'); if (includeTesters) includes.push('tester'); if (includes.length > 0) { params.include = includes.join(','); } // Add field selections params['fields[betaFeedbackScreenshotSubmissions]'] = 'createdDate,comment,email,deviceModel,osVersion,locale,timeZone,architecture,connectionType,pairedAppleWatch,appUptimeInMilliseconds,diskBytesAvailable,diskBytesTotal,batteryPercentage,screenWidthInPoints,screenHeightInPoints,appPlatform,devicePlatform,deviceFamily,buildBundleId,screenshots,build,tester'; const response = await this.client.get<BetaFeedbackScreenshotSubmissionResponse>( `/betaFeedbackScreenshotSubmissions/${feedbackId}`, params ); // If downloadScreenshot is true, download and include the screenshot as base64 const screenshots = response.data.attributes?.screenshots; if (downloadScreenshot && screenshots && screenshots.length > 0) { try { const screenshot = screenshots[0]; console.error(`Downloading screenshot from: ${screenshot.url.substring(0, 100)}...`); const axios = (await import('axios')).default; const imageResponse = await axios.get(screenshot.url, { responseType: 'arraybuffer', timeout: 10000, // 10 second timeout maxContentLength: 5 * 1024 * 1024, // 5MB max headers: { 'User-Agent': 'App-Store-Connect-MCP-Server/1.0' } }); // Convert to base64 const base64Data = Buffer.from(imageResponse.data).toString('base64'); const mimeType = imageResponse.headers['content-type'] || 'image/jpeg'; // Return response with both data and image content return { toolResult: response, content: [ { type: "text", text: `Beta feedback screenshot (${screenshot.width}x${screenshot.height}) - ${response.data.attributes.comment || 'No comment'}` }, { type: "image", data: base64Data, mimeType: mimeType } ] }; } catch (error: any) { // If download fails, just return the normal response console.error('Failed to download screenshot:', error.message); return response; } } return response; }
- src/index.ts:279-306 (schema)JSON Schema definition for the tool's input parameters, including feedbackId (required), optional includes for builds/testers, and screenshot download flag.name: "get_beta_feedback_screenshot", description: "Get detailed information about a specific beta feedback screenshot submission. By default, downloads and returns the screenshot image.", inputSchema: { type: "object", properties: { feedbackId: { type: "string", description: "The ID of the beta feedback screenshot submission" }, includeBuilds: { type: "boolean", description: "Include build information in response (optional)", default: false }, includeTesters: { type: "boolean", description: "Include tester information in response (optional)", default: false }, downloadScreenshot: { type: "boolean", description: "Download and return the screenshot as an image (default: true)", default: true } }, required: ["feedbackId"] } },
- src/index.ts:1338-1345 (registration)Tool call dispatching/registration in the MCP server request handler switch statement. Calls the beta handler and handles special image content response.case "get_beta_feedback_screenshot": const result = await this.betaHandlers.getBetaFeedbackScreenshot(args as any); // If the result already contains content (image), return it directly if (result.content) { return result; } // Otherwise format as text return formatResponse(result);
- src/types/beta.ts:143-153 (schema)TypeScript interface defining the expected response structure from the App Store Connect API for beta feedback screenshot submissions.export interface BetaFeedbackScreenshotSubmissionResponse { data: BetaFeedbackScreenshotSubmission; included?: Array<{ id: string; type: string; attributes?: any; }>; links?: { self: string; }; }