codemagic-mcp-server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| ASC_KEY_ID | No | App Store Connect API key ID | |
| ASC_ISSUER_ID | No | App Store Connect issuer ID | |
| ASC_BYPASS_KEYCHAIN | No | Set to '1' to force env var auth instead of the macOS keychain | |
| ASC_PRIVATE_KEY_B64 | No | Base64-encoded .p8 private key for App Store Connect | |
| CODEMAGIC_API_TOKEN | Yes | Your Codemagic API token. Found in Codemagic → User settings → Integrations. | |
| GOOGLE_PLAY_SERVICE_ACCOUNT_CREDENTIALS | No | Raw JSON content of your Google Play service account key file (or @file: prefix) |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| prompts | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| pingA | Check that the server is alive and return its version |
| list_applicationsA | List all applications in your Codemagic account. Call this first to get the app IDs needed by all other Codemagic tools. |
| list_teamsA | List teams the authenticated Codemagic account belongs to. Use the team IDs returned here with list_applications, list_builds, and other tools that accept an optional team_id. |
| list_workflowsA | List workflows for an application. Returns workflow names and IDs — use the ID in trigger_build to run a specific workflow. Note: yaml-defined workflows only appear after their first build has run. |
| list_buildsA | List builds for a team with optional filters. Returns build IDs and status. Use get_build with a build ID to retrieve full details and artifact download URLs. |
| get_buildA | Get full details for a single build including artifact download URLs. The build ID comes from trigger_build or list_builds. Artifact URLs require x-auth-token — use them with upload_to_testflight, upload_to_google_play, or create_public_artifact_url. |
| trigger_buildA | Trigger a new build on Codemagic. For release builds: determine BUILD_NUMBER first using list_asc_builds (iOS) or list_google_play_tracks (Android), then pass it in the variables parameter. Use yaml_content to supply an inline codemagic.yaml — get a starter template from get_yaml_template and validate it with validate_codemagic_yaml before triggering. Call wait_for_build with the returned build ID to wait for completion and retrieve artifact URLs. |
| wait_for_buildA | Check the current status of a Codemagic build. Returns immediately — no polling loop. If the build has not finished, call this tool again with the same build_id. A Codemagic build takes 10–40 minutes; calling this 20+ times is normal and expected. Returns full build details and artifact download URLs once a terminal state is reached. |
| cancel_buildA | Cancel a running or queued Codemagic build. Use when a triggered build is no longer needed — for example if the wrong branch was used or an error was found after triggering. Has no effect on builds that have already finished. |
| add_applicationA | Add a new application to Codemagic by connecting a Git repository. For HTTPS URLs: if you have connected your GitHub, GitLab, or Bitbucket account via Codemagic Settings → Integrations, private repositories are accessible with just the URL — no credentials needed. For SSH URLs (git@... or ssh://git@...): a fresh Ed25519 deploy key is generated automatically. The private key is stored directly in Codemagic and the public key is added to GitHub automatically if the gh CLI is installed and authenticated, or shown for manual setup otherwise. Note: after adding, the app shows 'Set up build' in the Codemagic UI — this is expected. |
| list_variable_groupsA | List variable groups for a team or app in Codemagic. Use group names to reference them in trigger_build. Secret values are never returned — manage secrets directly in the Codemagic UI. |
| list_variablesA | List variables in a Codemagic variable group. Returns variable IDs, names, and values. Secret variable values are returned as null — only non-secret values are visible. Use the variable IDs with update_variable and delete_variable. |
| create_variable_groupA | Create a new variable group in Codemagic. Requires a team_id (personal accounts do not support global variable groups) or an app_id for app-level groups. After creating, add non-secret variables via add_variable, or add secret values directly in the Codemagic UI. |
| add_variableA | Add a non-secret variable to a Codemagic variable group. For secret values (API keys, certificates, tokens) use the Codemagic UI instead — secrets should never pass through the agent. |
| update_variableA | Update the name or value of an existing non-secret variable in a Codemagic variable group. The variable_id comes from list_variable_groups. For secret values use the Codemagic UI — secrets should never pass through the agent. |
| delete_variableA | Delete a variable from a Codemagic variable group. The variable_id comes from list_variable_groups. This cannot be undone. |
| get_webhook_urlA | Get the incoming webhook URL for a Codemagic app. Paste this URL into your Git provider (GitHub, GitLab, or Bitbucket) repository settings to trigger builds automatically on push or pull request events. |
| list_webhooksA | List webhook subscriptions configured for a Codemagic app |
| delete_webhookB | Delete a webhook subscription from a Codemagic app |
| list_cachesA | List build caches for a Codemagic app. Each cache is scoped to a workflow. Use the cache IDs with delete_cache to free up storage or force a clean build. |
| delete_cacheA | Delete a build cache for a Codemagic app. If cache_id is provided, deletes that specific workflow cache. If omitted, deletes all caches for the app. Deletion is asynchronous — the API returns immediately and completes in the background. |
| create_public_artifact_urlA | Create a time-limited public download URL for a build artifact. Pass the artifact URL from get_build or wait_for_build. The returned URL is accessible without authentication — anyone with the link can download the artifact. Use for sharing IPAs or AABs with testers who don't have Codemagic access. |
| get_build_logsA | Fetch logs for a Codemagic build. By default returns logs for failed steps only — the primary use case is diagnosing why a build failed. Pass step_name to fetch logs for a specific step regardless of status (e.g. 'building_ios', 'testing', 'publishing'). Always returns the step list with statuses first. |
| list_asc_appsA | List apps in App Store Connect. Call this first to get the ASC app ID needed by all other App Store Connect tools. |
| list_asc_buildsC | List TestFlight builds for an app in App Store Connect. Find the highest version number, increment by 1, and pass that as BUILD_NUMBER in trigger_build variables before triggering a release build. |
| list_testflight_groupsA | List TestFlight beta groups for an app. Use a group name from this list in the beta_group parameter of upload_to_testflight to distribute to testers automatically after upload. |
| get_asc_review_statusA | Get the current App Store review status for an app. Call this after submitting to the App Store to monitor progress and check for blockers. |
| get_asc_release_statusA | Get a full release pipeline status dashboard for an app, including latest build, TestFlight, App Store version, and submission state |
| validate_app_submissionA | Run a preflight readiness check for an App Store version before submitting for review. Checks metadata completeness, build attachment, export compliance, pricing, screenshots, and more. Returns an ordered remediation plan — fix the first item, then call again to confirm it is resolved. Call this before publish_to_app_store with submit_for_review=true. |
| set_version_metadataA | Update App Store version localization metadata — What's New text, description, keywords, and more. What's New is required for every release before submitting for review. Call once per locale — en-US is the required default; add other locales if the app supports them. Use validate_app_submission afterward to confirm the update resolved the blocker. |
| set_export_complianceA | Set the export compliance declaration for an iOS build. Required before App Store submission and for TestFlight external distribution. Most apps only use standard HTTPS/TLS — set uses_non_exempt_encryption to false. Only set it to true if the app implements custom or proprietary encryption beyond standard protocols. Defaults to the latest build for the app; pass build_id to target a specific build. |
| release_versionA | Release an App Store version that has been approved and is waiting in 'Pending Developer Release' state. This immediately makes the update available to all users (or starts the phased rollout if one was configured). Use set_phased_release with action=create before submission if you want a gradual rollout instead of an instant release. |
| set_phased_releaseA | Manage a phased rollout for an App Store version. Phased rollout gradually releases the update over 7 days: 1% → 2% → 5% → 10% → 20% → 50% → 100%. Actions: 'create' — configure phased rollout before submitting for review. 'pause' — pause an in-progress rollout (use if a critical bug is found after release). 'resume' — resume a paused rollout. 'complete' — immediately release to all remaining users. |
| submit_beta_reviewA | Submit a build for TestFlight beta app review. Required before external beta groups can install the build — Apple reviews it once, then all external groups can access it. Internal groups (Apple employees / org members) do not require beta review. Get the build ID from list_asc_builds. |
| add_testflight_testerA | Add a tester to TestFlight by email address. Optionally assign them to a specific beta group — use list_testflight_groups to get group names. The tester receives an invitation email from Apple. |
| create_testflight_groupA | Create a new TestFlight beta group for an app. External groups require beta app review before testers can install builds. Internal groups (Apple org members) do not require review — useful for fast internal QA. |
| upload_to_testflightB | Download an IPA artifact from Codemagic and upload it to TestFlight via App Store Connect. Optionally distribute to a beta group after upload. |
| upload_build_to_ascA | Download an IPA from a Codemagic artifact URL and upload it to App Store Connect. Returns immediately once the upload commits — does NOT wait for Apple's processing pipeline. After calling this, poll list_asc_builds until the build's processingState is VALID, then call submit_for_app_store_review with the build ID. |
| submit_for_app_store_reviewA | Attach a processed build to an App Store version and submit it for review. The build must have processingState VALID — confirm with list_asc_builds before calling. Requires version metadata (What's New) and export compliance to be set first. Use validate_app_submission to catch blockers before submitting. |
| get_ios_store_listingA | Pull the current App Store listing text for all locales of an app version. Returns app-info fields (name, subtitle, privacy URLs) and version fields (description, keywords, promotional text, support URL, what's new) grouped by locale. Use before set_ios_store_listing to review what is currently live. |
| set_ios_store_listingA | Update App Store listing text for a single locale. Only the fields you provide are changed — omitted fields are left as-is. App-info fields (name, subtitle) apply to all versions of the app. Version fields (description, keywords, whatsNew, etc.) apply to the specified version only. Changes are staged through the asc CLI and validated before being applied. |
| list_ios_screenshot_typesA | List the supported screenshot device types for the App Store and their required pixel dimensions. By default returns the two most-required types: IPHONE_65 and IPAD_PRO_3GEN_129. Pass all=true to get the full matrix of all supported device types. Use the deviceType values returned here as the device_type parameter for upload_ios_screenshots. |
| upload_ios_screenshotsA | Download screenshot images from URLs and upload them to App Store Connect for a specific device type and locale. Apple allows up to 10 screenshots per set. Supported formats: PNG (no alpha) and JPEG. Max 10 MB per file. Call list_ios_screenshot_types first to get valid device_type values and required dimensions. Set replace=true to delete existing screenshots before uploading (recommended when refreshing a set). |
| list_google_play_tracksB | List Google Play tracks (internal, alpha, beta, production) with current release info and version codes. Find the highest versionCode across all tracks, increment by 1, and pass that as BUILD_NUMBER in trigger_build variables before triggering a release build. |
| list_google_play_bundlesA | List all uploaded App Bundles (AAB) for an app on Google Play, with their version codes. Use this to audit what has already been uploaded before triggering a new build. |
| upload_to_google_playA | Download an AAB artifact from Codemagic and publish it to a Google Play track. Use the AAB artifact URL returned by wait_for_build. Start with the internal track — it is safest for first uploads and can be promoted to alpha/beta/production manually in the Play Console. |
| promote_google_play_releaseA | Promote a release between Google Play tracks (e.g. internal → alpha → beta → production) without re-uploading. Set user_fraction to enable staged rollout on the target track (0.1 = 10% of users). To halt an in-progress staged rollout: set source_track=target_track='production' and release_status='halted'. To resume a halted rollout: same tracks with release_status='inProgress' and a user_fraction. |
| set_rollout_fractionA | Adjust the staged rollout percentage for an existing release on a Google Play track. Use this to gradually expand a rollout (e.g. 10% → 25% → 50% → 100%). Requires the version code of the release currently in the staged rollout. |
| share_app_internallyA | Upload an AAB from Codemagic as a Google Play internal app sharing link. Returns an install URL that can be shared with testers instantly — no track, no review, no version code ceremony. Testers need the internal app sharing feature enabled on their device. Ideal for quick QA before promoting to a track. |
| get_latest_build_numberA | Get the highest versionCode currently on Google Play across all tracks (or specific tracks). Use this before triggering a release build to determine the next BUILD_NUMBER — increment the result by 1. |
| get_android_store_listingA | Fetch the current Google Play store listing for a specific language. Returns title, short description, and full description. Use before set_android_store_listing to review existing text. |
| set_android_store_listingA | Update the Google Play store listing for a specific language. Only the fields you provide are updated — omitted fields are left unchanged. Changes go live immediately on commit; there is no staging step on Google Play. |
| upload_android_screenshotsA | Download screenshot images from URLs and upload them to Google Play for a specific language and device type. Google allows up to 8 screenshots per device type. Supported formats: JPEG and 24-bit PNG (no alpha). Max 8 MB per file. Common image types: phoneScreenshots, sevenInchScreenshots, tenInchScreenshots, tvScreenshots, wearScreenshots. Set replace=true to delete all existing screenshots of this type before uploading (recommended when refreshing a set). All uploads are committed atomically — if any upload fails, no changes go live. |
| list_google_play_reviewsA | List recent Google Play user reviews for an app. Only reviews that contain text are returned — star-only ratings are excluded by the API. Use max_star_rating to focus on negative reviews (e.g. max_star_rating=2 for 1–2 star reviews). Each review includes the review ID needed for reply_to_google_play_review. Reviews are ordered by last modified date, most recent first. |
| reply_to_google_play_reviewA | Post or update a developer reply to a Google Play user review. Replies are limited to 350 characters. If the review already has a developer reply, this call replaces it. Get the review_id from list_google_play_reviews. Write a personal, helpful reply — responding to negative reviews improves store ratings and user trust. |
| set_android_data_safetyA | Submit the data safety declaration for a Google Play app. The declaration describes what data the app collects, how it is used, and whether it is shared. Accepts the raw CSV exported from Play Console → App content → Data safety → Export CSV. Re-upload whenever data practices change (new data type, updated retention policy, etc.). Takes effect immediately — there is no staging step and no GET endpoint to retrieve current labels. |
| validate_codemagic_yamlA | Validate a codemagic.yaml file against the official Codemagic JSON schema |
| get_yaml_templateA | Get a starter codemagic.yaml template for a given project type. Templates cover build and signing only — publishing is handled separately via App Store Connect tools. Call list_yaml_template_types to see all valid project_type values. IMPORTANT: Android templates use linux_x2 by default (cheaper, no Mac needed). Personal accounts (no team) cannot use linux_x2 — replace it with mac_mini_m2 for personal accounts. |
| list_yaml_template_typesA | List all available codemagic.yaml template types |
| detect_project_typeA | Detect the Codemagic project type from a repository file listing. Returns the recommended template type, confidence level, and the suggested debug template to use for initial onboarding. For JavaScript/TypeScript projects, providing package.json content significantly improves accuracy. |
| prepare_release_notesA | Validate localized release notes before submitting to the App Store or Google Play. Checks that each locale is a valid BCP-47 code (e.g. en-US, fr-FR, zh-Hans) and that text fits within platform char limits (Android: 500, iOS: 4000). Pass platform='both' to validate against the stricter Android limit for notes that will go to both stores. |
| check_publish_readinessA | Aggregate publish-readiness checks for iOS or Android into a single pass/fail report. API-verifiable checks (valid build, store listing completeness, binary validation) run live. Items that have no API (age rating, privacy labels, content policy, legal agreements) are always listed as 'human required' so nothing is silently skipped. Each item is tagged as 'agent can fix' or 'human required', giving a clear action plan. Call this before submit_for_app_store_review (iOS) or promoting to production (Android). Use first_publish_ios or first_publish_android prompts for the one-time account/app-record setup. |
| get_test_resultsA | Fetch and parse test results from a Codemagic build. Searches the build's artifact list for JUnit XML files and returns a structured pass/fail/error/skip summary with per-failure details (message + stack trace excerpt). Covers Flutter, Android instrumented tests, and iOS (xcresult converted by Codemagic's CLI tools). Pass artifact_url directly if you already have it from wait_for_build — skips the artifact search. The build must be in a terminal state (finished or failed) for artifacts to be available. Requires the codemagic.yaml workflow to include a test_report glob pointing at the JUnit XML output. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| onboarding | Step-by-step guide to connect a repository to Codemagic and trigger a first debug build |
| android_release | Step-by-step guide to build a signed Android AAB on Codemagic and publish it to Google Play |
| ios_release | Step-by-step guide to build a signed iOS IPA on Codemagic and upload it to the App Store |
| first_publish_ios | One-time setup checklist for first-time iOS App Store publishers — walks through the UI steps the agent cannot do (Apple Developer enrollment, app record creation, age rating, privacy labels), then hands off to /ios_release |
| first_publish_android | One-time setup checklist for first-time Google Play publishers — walks through the UI steps the agent cannot do (account creation, content rating, closed testing period), then hands off to /android_release |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- 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/todah-zg/codemagic-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server