import Link from "next/link" import { PageHeader } from "../_components/page-header"
<PageHeader breadcrumbs={["Docs", "Reference", "Configuration"]} title="Configuration" lede="Everything MobileBuildMCP reads on startup: the config file, where values come from, and how layers combine." />
MobileBuildMCP reads configuration from environment variables and a project-local config file. Both are optional but together give you deterministic per-session behavior. To create or update your config interactively, run:
mobilebuildmcp setupThe config file is the canonical home for structured, repo-scoped, version-controlled settings. Create it at your workspace root:
<workspace-root>/.mobilebuildmcp/config.yaml
Minimal example:
schemaVersion: 1
enabledWorkflows: ["simulator", "ui-automation", "debugging"]schemaVersion: 1 is required.
| Topic | Covers |
|---|---|
| Session Defaults | Setting shared workspace/scheme/simulator values once, named profiles for monorepos |
| Environment Variables | Every env var MobileBuildMCP reads, including MCP client bootstrap |
| Workflows | Enabling and disabling tool groups via enabledWorkflows and custom workflows |
| Privacy | Telemetry scope and opt-out (sentryDisabled) |
The Xcode IDE Bridge is opted in via enabledWorkflows: ["xcode-ide"] and is documented on its own page.
When multiple sources are present, they merge with clear precedence (highest wins):
session_set_defaultstool, agent runtime overrides, set during a session.mobilebuildmcp/config.yaml, project-local, version-controlled- Environment variables, MCP client bootstrap
This follows the git config pattern. Each layer serves a different context:
- Config file for structured, repo-scoped, version-controlled settings.
- Env vars for bootstrap defaults in MCP clients with limited workspace support.
- Tool calls for agent-driven runtime adjustments.
Every option in .mobilebuildmcp/config.yaml:
schemaVersion: 1
# Workflow selection, see /docs/workflows
enabledWorkflows: ["simulator", "ui-automation", "debugging"]
customWorkflows:
my-workflow:
- build_run_sim
- record_sim_video
- screenshot
experimentalWorkflowDiscovery: false
# Session defaults, see /docs/session-defaults
disableSessionDefaults: false
sessionDefaults:
projectPath: "./MyApp.xcodeproj"
scheme: "MyApp"
simulatorName: "iPhone 17"
# Build settings
incrementalBuildsEnabled: false
# Text output
filePathRenderStyle: "list" # "list" or "tree"
# Test output
showTestTiming: false
# Debugging and telemetry
debug: false
sentryDisabled: false
debuggerBackend: "dap"
dapRequestTimeoutMs: 30000
dapLogEvents: false
launchJsonWaitMs: 8000
# UI automation
uiDebuggerGuardMode: "error"
axePath: "/opt/axe/bin/axe"
# Project templates used by scaffold tools
iosTemplatePath: "/path/to/ios/templates"
iosTemplateVersion: "v1.2.3"
macosTemplatePath: "/path/to/macos/templates"
macosTemplateVersion: "v1.2.3"| Option | Type | Default |
|---|---|---|
schemaVersion |
number | Required (1) |
enabledWorkflows |
string[] | ["simulator"] |
customWorkflows |
object | {} |
experimentalWorkflowDiscovery |
boolean | false |
disableSessionDefaults |
boolean | false |
sessionDefaults |
object | {} |
sessionDefaultsProfiles |
object | {} |
activeSessionDefaultsProfile |
string | global |
incrementalBuildsEnabled |
boolean | false |
filePathRenderStyle |
"list" | "tree" |
CLI text: "list", MCP text: "tree" |
showTestTiming |
boolean | false |
debug |
boolean | false |
sentryDisabled |
boolean | false |
debuggerBackend |
string | "dap" |
dapRequestTimeoutMs |
number | 30000 |
dapLogEvents |
boolean | false |
launchJsonWaitMs |
number | 8000 |
uiDebuggerGuardMode |
string | "error" |
axePath |
string | Bundled |
iosTemplatePath |
string | GitHub default |
iosTemplateVersion |
string | Bundled |
macosTemplatePath |
string | GitHub default |
macosTemplateVersion |
string | Bundled |
For mode-specific options (incremental builds, debugger backend, UI guard mode, template overrides), see the comments in mobilebuildmcp setup's generated file, each option includes a short explanation of when to change it.