An MCP server to communicate with the App Store Connect API for iOS Developers
A Model Context Protocol (MCP) server for interacting with the App Store Connect API. This server provides tools for managing apps, beta testers, bundle IDs, devices, app metadata, and capabilities in App Store Connect.
The App Store Connect MCP Server is a comprehensive tool that bridges the gap between AI and Apple's App Store Connect ecosystem. Built on the Model Context Protocol (MCP), this server enables developers to interact with their App Store Connect data directly through conversational AI, making app management, beta testing, and analytics more accessible than ever.
Key Benefits:
Who This Is For:
This server transforms complex App Store Connect operations into simple conversational commands, whether you're checking app analytics, managing beta testers, updating app descriptions, or exploring your development pipeline.
App Management
Beta Testing
App Store Version Localizations ✨ NEW
Bundle ID Management
Device Management
User Management
Analytics & Reports
Xcode Development Tools
To install App Store Connect Server for Claude Desktop automatically:
npx @smithery/cli install appstore-connect-mcp-server --client claude
npm install @joshuarileydev/app-store-connect-mcp-server
Add the following to your Claude Desktop configuration file:
~/Library/Application Support/Claude/claude_desktop_config.json
%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"app-store-connect": {
"command": "npx",
"args": [
"-y",
"@joshuarileydev/app-store-connect-mcp-server"
],
"env": {
"APP_STORE_CONNECT_KEY_ID": "YOUR_KEY_ID",
"APP_STORE_CONNECT_ISSUER_ID": "YOUR_ISSUER_ID",
"APP_STORE_CONNECT_P8_PATH": "/path/to/your/auth-key.p8",
"APP_STORE_CONNECT_VENDOR_NUMBER": "YOUR_VENDOR_NUMBER_OPTIONAL"
}
}
}
}
APP_STORE_CONNECT_KEY_ID
: Your API Key IDAPP_STORE_CONNECT_ISSUER_ID
: Your Issuer IDAPP_STORE_CONNECT_P8_PATH
: Path to your .p8 private key fileTo enable sales and finance reporting tools, you'll also need:
APP_STORE_CONNECT_VENDOR_NUMBER
: Your vendor number from App Store ConnectNote: Sales and finance report tools (download_sales_report
, download_finance_report
) will only be available if the vendor number is configured. You can find your vendor number in App Store Connect under "Sales and Trends" or "Payments and Financial Reports".
list_apps
Get a list of all apps in App Store Connect.
Parameters:
limit
(optional): Maximum number of apps to return (default: 100, max: 200)bundleId
(optional): Filter by bundle identifierExample:
"List all my apps"
"Show me apps with bundle ID com.example.myapp"
"Get the first 50 apps"
get_app_info
Get detailed information about a specific app.
Parameters:
appId
(required): The ID of the appinclude
(optional): Related resources to include (e.g., appClips, appInfos, appStoreVersions, betaGroups, builds)Example:
"Get info for app ID 123456789"
"Show me app 123456789 with beta groups and builds"
"Get detailed information about my app including app store versions"
list_beta_groups
List all beta testing groups (internal and external).
Parameters:
limit
(optional): Maximum number of groups to return (default: 100, max: 200)appId
(optional): Filter by app IDExample:
"Show all beta groups"
"List beta groups for app 123456789"
"Get the first 20 beta groups"
list_group_testers
List testers in a specific beta group.
Parameters:
groupId
(required): The ID of the beta grouplimit
(optional): Maximum number of testers to return (default: 100, max: 200)Example:
"List all testers in group ABC123"
"Show me the first 50 testers in beta group ABC123"
add_tester_to_group
Add a new tester to a beta group.
Parameters:
groupId
(required): The ID of the beta groupemail
(required): Email address of the testerfirstName
(optional): Tester's first namelastName
(optional): Tester's last nameExample:
"Add [email protected] to beta group ABC123"
"Add John Smith ([email protected]) to group ABC123"
remove_tester_from_group
Remove a tester from a beta group.
Parameters:
groupId
(required): The ID of the beta grouptesterId
(required): The ID of the testerExample:
"Remove tester XYZ789 from group ABC123"
"Delete tester XYZ789 from beta group ABC123"
list_beta_feedback_screenshots
List beta feedback screenshot submissions.
Parameters:
appId
(optional): Filter by app IDbundleId
(optional): Filter by bundle identifierbuildId
(optional): Filter by build IDlimit
(optional): Maximum results (default: 100)includeBuilds
(optional): Include build informationincludeTesters
(optional): Include tester informationExample:
"Show beta feedback screenshots for app 123456789"
"List feedback screenshots for bundle ID com.example.app"
"Get feedback with tester info for build XYZ"
get_beta_feedback_screenshot
Get detailed information about a specific beta feedback screenshot.
Parameters:
feedbackId
(required): The ID of the feedbackincludeBuilds
(optional): Include build informationincludeTesters
(optional): Include tester informationdownloadScreenshot
(optional): Download the screenshot image (default: true)Example:
"Get feedback screenshot FEEDBACK123"
"Show me feedback FEEDBACK123 with tester details"
"Download screenshot from feedback FEEDBACK123"
create_app_store_version
Create a new app store version for an app.
Parameters:
appId
(required): The ID of the appplatform
(required): The platform (IOS, MAC_OS, TV_OS, VISION_OS)versionString
(required): Version string in format X.Y or X.Y.Z (e.g., '1.0' or '1.0.0')copyright
(optional): Copyright text for this versionreleaseType
(optional): How the app should be released (MANUAL, AFTER_APPROVAL, SCHEDULED)earliestReleaseDate
(optional): ISO 8601 date string (required when releaseType is SCHEDULED)buildId
(optional): ID of the build to associate with this versionExample:
"Create iOS version 2.0.0 for app 123456789"
"Create macOS version 1.5.0 for app 123456789 with manual release"
"Create scheduled iOS version 2.1.0 for app 123456789 releasing on 2024-02-01"
"Create version 1.2.0 for app 123456789 with build BUILD456 and copyright '2024 My Company'"
list_app_store_versions
Get all app store versions for a specific app.
Parameters:
appId
(required): The ID of the applimit
(optional): Maximum number of versions to return (default: 100, max: 200)filter
(optional): Filter options
platform
: Filter by platform (IOS, MAC_OS, TV_OS)versionString
: Filter by version string (e.g., '1.0.0')appStoreState
: Filter by state (e.g., READY_FOR_SALE, PREPARE_FOR_SUBMISSION)Example:
"List all versions for app 123456789"
"Show iOS versions for app 123456789"
"Find version 2.0.0 for app 123456789"
"List versions in review for app 123456789"
list_app_store_version_localizations
Get all localizations for a specific app store version.
Parameters:
appStoreVersionId
(required): The ID of the app store versionlimit
(optional): Maximum number of localizations (default: 100, max: 200)Example:
"List all localizations for app version VERSION123"
"Show me language versions for app store version VERSION123"
get_app_store_version_localization
Get detailed information about a specific localization.
Parameters:
localizationId
(required): The ID of the localizationExample:
"Get localization details for LOCALE123"
"Show me the French localization LOCALE123"
update_app_store_version_localization
Update a specific field in an app store version localization.
Parameters:
localizationId
(required): The ID of the localizationfield
(required): Field to update (description, keywords, marketingUrl, promotionalText, supportUrl, whatsNew)value
(required): New value for the fieldExample:
"Update description for localization LOCALE123 to 'Amazing new app description'"
"Change keywords for LOCALE123 to 'productivity, tasks, organize'"
"Update what's new text for LOCALE123 to 'Bug fixes and performance improvements'"
create_bundle_id
Register a new bundle ID for app development.
Parameters:
identifier
(required): The bundle ID string (e.g., 'com.example.app')name
(required): A name for the bundle IDplatform
(required): Platform (IOS, MAC_OS, or UNIVERSAL)seedId
(optional): Your team's seed IDExample:
"Create bundle ID com.mycompany.newapp for iOS named 'My New App'"
"Register universal bundle ID com.example.app called 'Example App'"
list_bundle_ids
Find and list bundle IDs registered to your team.
Parameters:
limit
(optional): Maximum results (default: 100, max: 200)sort
(optional): Sort order (name, -name, platform, -platform, identifier, -identifier)filter
(optional): Filter by identifier, name, platform, or seedIdinclude
(optional): Include related resources (profiles, bundleIdCapabilities, app)Example:
"List all bundle IDs"
"Show iOS bundle IDs sorted by name"
"Find bundle IDs containing 'example'"
get_bundle_id_info
Get detailed information about a specific bundle ID.
Parameters:
bundleIdId
(required): The ID of the bundle IDinclude
(optional): Related resources to includefields
(optional): Specific fields to includeExample:
"Get info for bundle ID BUNDLE123"
"Show bundle ID BUNDLE123 with capabilities"
enable_bundle_capability
Enable a capability for a bundle ID.
Parameters:
bundleIdId
(required): The ID of the bundle IDcapabilityType
(required): Type of capability (e.g., PUSH_NOTIFICATIONS, ICLOUD, GAME_CENTER)settings
(optional): Capability-specific settingsExample:
"Enable push notifications for bundle ID BUNDLE123"
"Add iCloud capability to bundle BUNDLE123"
"Enable Game Center for bundle ID BUNDLE123"
disable_bundle_capability
Disable a capability for a bundle ID.
Parameters:
capabilityId
(required): The ID of the capability to disableExample:
"Disable capability CAP123"
"Remove capability CAP123 from bundle ID"
list_devices
Get a list of all devices registered to your team.
Parameters:
limit
(optional): Maximum results (default: 100, max: 200)sort
(optional): Sort order (name, platform, status, udid, deviceClass, model, addedDate)filter
(optional): Filter by name, platform, status, udid, or deviceClassfields
(optional): Specific fields to includeExample:
"List all devices"
"Show enabled iOS devices"
"Find devices with name containing 'John'"
"List iPhones sorted by date added"
list_users
Get a list of all users on your App Store Connect team.
Parameters:
limit
(optional): Maximum results (default: 100, max: 200)sort
(optional): Sort order (username, firstName, lastName, roles)filter
(optional): Filter by username or rolesfields
(optional): Specific fields to includeinclude
(optional): Include visibleApps relationshipExample:
"List all team members"
"Show users with admin role"
"Find developers sorted by last name"
"List users with their visible apps"
create_analytics_report_request
Create a new analytics report request for an app.
Parameters:
appId
(required): The app IDaccessType
(required): Type of analytics (ONGOING or ONE_TIME_SNAPSHOT)frequency
(optional): Report frequency for ongoing reports (DAILY, WEEKLY, MONTHLY)startDate
(optional): Start date (YYYY-MM-DD)endDate
(optional): End date (YYYY-MM-DD)Example:
"Create daily analytics report for app 123456789"
"Generate one-time snapshot report for app 123456789 from 2024-01-01 to 2024-01-31"
list_analytics_reports
Get available analytics reports for a request.
Parameters:
reportRequestId
(required): The report request IDlimit
(optional): Maximum results (default: 100, max: 200)filter
(optional): Filter by category, name, or dateExample:
"List reports for request REQ123"
"Show app usage reports for request REQ123"
list_analytics_report_segments
Get segments for a specific analytics report.
Parameters:
reportId
(required): The analytics report IDlimit
(optional): Maximum results (default: 100, max: 200)Example:
"List segments for report REPORT123"
"Get download URLs for report REPORT123"
download_analytics_report_segment
Download data from an analytics report segment.
Parameters:
url
(required): The segment download URLExample:
"Download data from https://api.appstoreconnect.apple.com/..."
download_sales_report
Download sales and trends reports.
Parameters:
frequency
(required): Report frequency (DAILY, WEEKLY, MONTHLY, YEARLY)reportDate
(required): Date in appropriate formatreportType
(required): Type of report (SALES, SUBSCRIPTION, SUBSCRIPTION_EVENT, SUBSCRIBER, NEWSSTAND, PREORDER)reportSubType
(required): SUMMARY or DETAILEDvendorNumber
(optional): Override default vendor numberversion
(optional): Report version (default: 1_0)Example:
"Download daily sales summary for 2024-01-15"
"Get monthly subscription detailed report for 2024-01"
"Download yearly sales summary for 2023"
download_finance_report
Download finance reports for a specific region.
Parameters:
reportDate
(required): Report date (YYYY-MM)regionCode
(required): Region code (e.g., 'Z1' for worldwide)vendorNumber
(optional): Override default vendor numberExample:
"Download finance report for January 2024 worldwide"
"Get finance report for 2024-01 region Z1"
list_schemes
List all available schemes in an Xcode project or workspace.
Parameters:
projectPath
(required): Path to .xcodeproj or .xcworkspace fileExample:
"List schemes in /Users/john/MyApp/MyApp.xcodeproj"
"Show available schemes for MyApp.xcworkspace"
The server implements proper error handling for:
# Install dependencies
npm install
# Build the project
npm run build
# Run tests
npm test
# Run type checking
npm run type-check
This project is licensed under the MIT License - see the LICENSE file for details.