flutter-ios-bridge-mcp
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. | |
| FIB_CONFIG | No | Path to a custom config.toml file. Overrides the default configuration location. | |
| FIB_MAC_HOST | No | Hostname or IP address of the remote Mac (optional). | |
| FIB_MAC_PORT | No | SSH port for the remote Mac (default: 22). | |
| FIB_MAC_USER | No | Username for SSH connection to the remote Mac (optional). | |
| GITHUB_TOKEN | No | Fine-grained PAT with Actions R/W, Secrets R/W, Contents R. Falls back to `gh auth token`. | |
| ASC_ISSUER_ID | No | App Store Connect API issuer ID. | |
| FIB_GITHUB_REPO | No | GitHub repository in `owner/repo` format. Defaults to the project's git remote. | |
| FIB_MAC_KEY_PATH | No | Path to the SSH private key for the remote Mac (alternative to FIB_MAC_PASSWORD). | |
| FIB_MAC_PASSWORD | No | Password for SSH connection to the remote Mac (alternative to FIB_MAC_KEY_PATH). | |
| FIB_PROJECT_PATH | No | Default Flutter project path. | |
| FIB_MAC_REMOTE_DIR | No | Remote directory on the Mac to sync project files to. | |
| ASC_PRIVATE_KEY_PATH | No | Path to the App Store Connect API private key (.p8 file). |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| bridge_statusB | Show which backends (GitHub CI, App Store Connect, remote Mac, USB device) are configured and what is missing. |
| ios_doctorA | Audit the ios/ side of a Flutter project without Xcode: bundle id, Info.plist usage strings required by the plugins in pubspec.yaml, deployment target vs Podfile, App Store icon (size/alpha), launch screen, privacy manifest, Firebase config, entitlements. Returns issues sorted by severity with fixes. |
| ios_get_info_plistB | Read ios/Runner/Info.plist (optionally only the given keys). |
| ios_set_info_plist_valueB | Set a key in ios/Runner/Info.plist. value_type: auto|string|bool|int|real|array|dict|json. Example: key='NSCameraUsageDescription', value='Used to scan documents'. |
| ios_remove_info_plist_keyA | Delete a key from ios/Runner/Info.plist. |
| ios_get_build_settingsA | Read key Xcode build settings from project.pbxproj (bundle ids, deployment target, team, signing style...) plus the Podfile platform. |
| ios_set_bundle_identifierC | Change the iOS bundle identifier (Runner and RunnerTests) in project.pbxproj. |
| ios_set_deployment_targetB | Set the minimum iOS version consistently in project.pbxproj, Podfile and AppFrameworkInfo.plist. |
| ci_generate_workflowB | Write .github/workflows/flutter-ios-bridge.yml (+ a signing helper script) into the repo. The workflow builds on a GitHub macOS runner: simulator .app, unsigned IPA, or signed IPA with optional TestFlight upload. By default pins the same Flutter version you have installed locally. |
| ci_trigger_buildA | Start an iOS build on GitHub Actions. Builds what is pushed to |
| ci_list_runsC | List recent runs of the iOS workflow. |
| ci_wait_for_runA | Wait (up to timeout_seconds) for a run to finish; returns status and per-step results. Call repeatedly for long builds (a clean iOS build usually takes 8–20 minutes). |
| ci_get_logsB | Fetch the job logs of a run and extract the Xcode/CocoaPods/Flutter error lines plus the log tail. |
| ci_download_artifactsA | Download and unzip a run's build outputs (IPA / simulator .app.zip). Default destination: /build/ios-bridge//. |
| ci_cancel_runC | Cancel a running workflow run. |
| ci_set_signing_secretsA | Upload signing material to the repo's GitHub Actions secrets (encrypted client-side): IOS_P12_BASE64, IOS_P12_PASSWORD, IOS_PROFILE_BASE64 and, if include_asc_key, ASC_KEY_ID / ASC_ISSUER_ID / ASC_PRIVATE_KEY for TestFlight uploads. Works with a .p12 exported from anywhere, not only signing_quick_setup. |
| signing_quick_setupA | One-shot iOS code signing from Windows/Linux: registers the bundle id, creates (or reuses) an Apple certificate from a locally generated CSR, creates a provisioning profile, saves .p12/.mobileprovision under ~/.flutter-ios-bridge/signing, and (push_to_github) uploads them as GitHub secrets for signed CI builds. bundle_id defaults to the project's. ad-hoc/development include all registered devices. |
| signing_inspectA | Inspect a .mobileprovision (name, team, bundle id, kind, devices, expiry, certs) or a .p12 (needs password). |
| asc_listC | List App Store Connect / Developer Portal resources. |
| asc_register_bundle_idB | Register an explicit App ID (bundle identifier) in the Apple Developer portal. |
| asc_enable_capabilityA | Enable a capability on a bundle id, e.g. PUSH_NOTIFICATIONS, ASSOCIATED_DOMAINS, APPLE_ID_AUTH (Sign in with Apple), IN_APP_PURCHASE, HEALTHKIT, NFC_TAG_READING, APP_GROUPS, ICLOUD. Recreate profiles afterwards (signing_quick_setup) so they carry the new entitlement. |
| asc_register_deviceA | Register an iPhone for ad-hoc/development builds. With no udid, uses the USB-connected device (needs pymobiledevice3). |
| asc_revoke_certificateA | Revoke a signing certificate (frees a slot when Apple's certificate limit is hit). Profiles using it become invalid; apps already on the App Store are unaffected. |
| asc_download_profileC | Download a provisioning profile (.mobileprovision) by id. |
| testflight_buildsC | List recent TestFlight/App Store builds for the app with their processing state. |
| testflight_distributeC | Answer export compliance for a processed build (uses_non_exempt_encryption; None = leave as is) and add it to TestFlight beta groups (ids from testflight_builds). |
| mac_doctorA | Check the remote Mac: macOS, Xcode, Flutter, CocoaPods and installed simulator runtimes. |
| mac_sync_projectA | Upload the Flutter project to the remote Mac (skips build/, .dart_tool/, Pods/, .git). clean=true wipes the remote copy first. |
| mac_buildA | Build the project on the remote Mac (syncs first by default). Returns ok + the tail of the build output. |
| mac_list_simulatorsB | List iOS simulators on the remote Mac. |
| mac_boot_simulatorB | Boot a simulator (default: an already-booted one or the newest iPhone). |
| mac_run_on_simulatorC | Sync, build for the simulator, install and launch the app on the remote Mac's iOS Simulator. |
| mac_install_simulator_appB | Install a zipped simulator .app (e.g. from ci_download_artifacts) on the remote Mac's simulator and launch it. |
| mac_screenshotB | Take a screenshot of the iOS Simulator on the remote Mac and return it as an image. |
| mac_simulator_logsC | Recent unified-log lines from the app running in the simulator (Flutter print/debugPrint show up here). |
| mac_open_urlC | Open a URL / deep link / universal link in the simulator. |
| mac_execC | Run a shell command on the remote Mac (login shell). in_project=true runs it inside the synced project dir,
e.g. |
| mac_fetch_fileB | Download a file from the remote Mac (relative paths resolve inside the synced project), e.g. build/ios/ipa/app.ipa. |
| device_listA | List iPhones/iPads connected over USB/Wi-Fi to this Windows/Linux machine. |
| device_infoC | Model, iOS version and UDID of a connected device. |
| device_install_appA | Install a signed .ipa (ad-hoc or development profile that includes this device) on a connected iPhone. |
| device_list_appsC | List user-installed apps on the connected device. |
| device_uninstall_appC | Uninstall an app from the connected device. |
| device_syslogA | Capture the device syslog for N seconds (max 120), optionally filtered by text or process name. Launch the app on the phone while this runs to catch crash reasons. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| ship_to_testflight | Guided flow: from a Windows/Linux Flutter project to a TestFlight build. |
| fix_ios_build | Diagnose and fix a failed iOS CI build. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 44 tools
Despite the size, every tool is scoped to a distinct backend/resource/action: project config, CI, signing, ASC/TestFlight, remote Mac, or USB device. The prefix plus explicit target (e.g. mac_build vs ci_trigger_build) makes misselection unlikely.
Tools consistently use lowercase snake_case with backend prefixes and mostly verb_object forms. A few noun-style names (`bridge_status`, `ios_doctor`, `testflight_builds`) break the strict verb_noun pattern, but the convention is otherwise predictable.
44 tools is well above the 25+ threshold and creates a large discovery burden for an agent. The multi-backend scope explains the count, but splitting into smaller per-backend servers would make the surface far more manageable.
The surface covers the full Flutter iOS bridge lifecycle: audit/config, CI workflow, signing/ASC resources, TestFlight distribution, remote Mac build/run, and USB device operations. Minor gaps exist, such as no direct provisioning-profile deletion and no App Store Connect app-creation step, but core workflows have no dead ends.