{
  "id": "ios-mobilebuildmcp",
  "type": "loadout",
  "title": "iOS builds with MobileBuildMCP (XcodeBuildMCP)",
  "summary": "Let the agent build, test, run and screenshot iOS and macOS apps through MobileBuildMCP, pinned with telemetry off, with Swift concurrency and pbxproj rules.",
  "description": "XcodeBuildMCP, now MobileBuildMCP from Sentry, is the MCP server iOS developers keep naming as a daily driver: it lets the agent discover schemes, build for a simulator, run tests, launch the app and look at the screen, instead of guessing xcodebuild flags. This loadout pins it with telemetry disabled and adds the rules for Swift work: build, test and look before reporting, main-actor UI, no force unwraps on outside data, Swift Testing for new tests, and hands off signing, entitlements, pbxproj and uploads.\n",
  "highlights": [
    "MobileBuildMCP pinned, telemetry off via MOBILEBUILDMCP_SENTRY_DISABLED",
    "Session defaults set once: project, scheme, simulator",
    "Done means built, tested, launched and seen on screen",
    "Swift concurrency rules; no unsafe escapes without a reason",
    "No pbxproj reformatting, signing changes or uploads"
  ],
  "version": "1.0.0",
  "license": "MIT",
  "author": {
    "name": "Agent Loadout",
    "url": "https://loadout.jnw-it.com"
  },
  "credits": [
    {
      "title": "getsentry/MobileBuildMCP (formerly XcodeBuildMCP)",
      "url": "https://github.com/getsentry/XcodeBuildMCP"
    },
    {
      "title": "MobileBuildMCP docs: privacy and telemetry opt-out",
      "url": "https://github.com/getsentry/xcodebuildmcp.com/blob/main/app/docs/_content/privacy.mdx"
    },
    {
      "title": "@KhalidDevLog: daily mobile MCPs (XcodeBuildMCP, Expo MCP, Figma MCP)",
      "url": "https://x.com/KhalidDevLog/status/2096183096697586039"
    }
  ],
  "categories": [
    "web-app"
  ],
  "stacks": [
    "swift",
    "ios",
    "xcode"
  ],
  "files": [
    {
      "path": "AGENTS.md",
      "role": "instructions",
      "description": "Swift and Xcode rules with MobileBuildMCP as the build tool.",
      "skill": null,
      "agent": null,
      "install_to": {
        "claude-code": "AGENTS.md",
        "codex": "AGENTS.md",
        "cursor": "AGENTS.md",
        "gemini-cli": "AGENTS.md",
        "antigravity-cli": "AGENTS.md",
        "copilot": "AGENTS.md"
      },
      "raw_url": "https://loadout.jnw-it.com/raw/ios-mobilebuildmcp/1.0.0/AGENTS.md",
      "raw_latest_url": "https://loadout.jnw-it.com/raw/ios-mobilebuildmcp/latest/AGENTS.md",
      "bytes": 1949,
      "lang": "markdown",
      "content": "# AGENTS.md: iOS and macOS app with MobileBuildMCP\n\nSwift app built with Xcode. The agent builds, runs and tests through MobileBuildMCP (formerly XcodeBuildMCP), not by\nguessing `xcodebuild` flags.\n\n## Tools\n- MCP server `mobilebuildmcp` (pinned in the MCP config). On first use in a session, list projects and schemes, and set\n  the session defaults (project or workspace, scheme, simulator) once instead of passing them on every call.\n- Telemetry is off in the MCP config (`MOBILEBUILDMCP_SENTRY_DISABLED`). Keep it that way unless the human changes it.\n- If the server is unavailable, fall back to `xcodebuild -scheme <scheme> -destination 'platform=iOS Simulator,name=<device>' build test`.\n\n## Done means\n- The app builds for the simulator with no new warnings, the tests for the scheme pass, and you launched the app and\n  looked at the screen you changed (screenshot or UI hierarchy through the MCP server).\n\n## Swift rules\n- Swift concurrency: UI work on `@MainActor`; no `DispatchQueue.main.async` in new code. Respect strict concurrency\n  checking if the project enables it; do not silence warnings with `@unchecked Sendable` or `nonisolated(unsafe)`\n  without explaining why it is safe.\n- SwiftUI: small views, state owned in one place (`@State`, `@Observable` models), no business logic in `body`.\n- No force unwraps (`!`) or `try!` on data from outside the app. Errors are typed and shown to the user where it matters.\n- Tests with Swift Testing (`@Test`, `#expect`) for new code, unless the project only uses XCTest.\n\n## Never\n- Never edit `project.pbxproj` by hand when the change can be made through a tool, and never reorder or reformat it.\n  If you must add a file, prefer a folder the project already syncs or ask the human.\n- Never change signing settings, bundle identifiers, entitlements or provisioning without the human asking.\n- Never upload to TestFlight or the App Store.\n\nUse the `ios-build-loop` skill for every change.\n"
    },
    {
      "path": "CLAUDE.md",
      "role": "adapter",
      "description": "Imports AGENTS.md for Claude Code.",
      "skill": null,
      "agent": "claude-code",
      "install_to": {
        "claude-code": "CLAUDE.md",
        "codex": null,
        "cursor": null,
        "gemini-cli": null,
        "antigravity-cli": null,
        "copilot": null
      },
      "raw_url": "https://loadout.jnw-it.com/raw/ios-mobilebuildmcp/1.0.0/CLAUDE.md",
      "raw_latest_url": "https://loadout.jnw-it.com/raw/ios-mobilebuildmcp/latest/CLAUDE.md",
      "bytes": 526,
      "lang": "markdown",
      "content": "# CLAUDE.md\n\n@AGENTS.md\n\n## Claude Code notes\n- Skills from this loadout live in `.claude/skills/`: `ios-build-loop`. Use them when their description matches the task.\n- MCP servers for this project are in `.mcp.json`. If a server is not connected, tell the human rather than working around it.\n- Follow AGENTS.md above; where this file and AGENTS.md disagree, AGENTS.md wins.\n\n<!-- From the Agent Loadout \"iOS builds with MobileBuildMCP (XcodeBuildMCP)\" v1.0.0 — https://loadout.jnw-it.com/loadouts/ios-mobilebuildmcp/ -->\n"
    },
    {
      "path": "GEMINI.md",
      "role": "adapter",
      "description": "Imports AGENTS.md for Gemini CLI.",
      "skill": null,
      "agent": "gemini-cli",
      "install_to": {
        "claude-code": null,
        "codex": null,
        "cursor": null,
        "gemini-cli": "GEMINI.md",
        "antigravity-cli": null,
        "copilot": null
      },
      "raw_url": "https://loadout.jnw-it.com/raw/ios-mobilebuildmcp/1.0.0/GEMINI.md",
      "raw_latest_url": "https://loadout.jnw-it.com/raw/ios-mobilebuildmcp/latest/GEMINI.md",
      "bytes": 400,
      "lang": "markdown",
      "content": "# GEMINI.md\n\n@./AGENTS.md\n\n## Gemini CLI notes\n- Skills from this loadout live in `.agents/skills/`: `ios-build-loop`. Use them when their description matches the task.\n- Follow AGENTS.md above; where this file and AGENTS.md disagree, AGENTS.md wins.\n\n<!-- From the Agent Loadout \"iOS builds with MobileBuildMCP (XcodeBuildMCP)\" v1.0.0 — https://loadout.jnw-it.com/loadouts/ios-mobilebuildmcp/ -->\n"
    },
    {
      "path": "skills/ios-build-loop/SKILL.md",
      "role": "skill",
      "description": "Build, test, run and look, through MobileBuildMCP.",
      "skill": "ios-build-loop",
      "agent": null,
      "install_to": {
        "claude-code": ".claude/skills/ios-build-loop/SKILL.md",
        "codex": ".agents/skills/ios-build-loop/SKILL.md",
        "cursor": ".agents/skills/ios-build-loop/SKILL.md",
        "gemini-cli": ".agents/skills/ios-build-loop/SKILL.md",
        "antigravity-cli": ".agents/skills/ios-build-loop/SKILL.md",
        "copilot": ".agents/skills/ios-build-loop/SKILL.md"
      },
      "raw_url": "https://loadout.jnw-it.com/raw/ios-mobilebuildmcp/1.0.0/skills/ios-build-loop/SKILL.md",
      "raw_latest_url": "https://loadout.jnw-it.com/raw/ios-mobilebuildmcp/latest/skills/ios-build-loop/SKILL.md",
      "bytes": 1244,
      "lang": "markdown",
      "content": "---\nname: ios-build-loop\ndescription: Build, test, run and look at an iOS or macOS change through MobileBuildMCP, then fix what the build log or the screen shows. Use for every change to a Swift app.\n---\n\n# iOS build loop\n\n1. Session setup (once): discover projects and schemes, list simulators, and set session defaults for project or\n   workspace, scheme and simulator. Prefer a recent iPhone simulator that is already booted.\n2. Baseline: build and run the tests before changing anything, so later failures are known to be yours.\n3. Make the change. Keep it small; one screen or one behaviour.\n4. Build for the simulator. Read errors and new warnings from the structured build output and fix them before going on.\n5. Run the tests for the scheme. A failing test you did not touch means stop and report.\n6. Launch the app on the simulator, go to the changed screen and take a screenshot or read the UI hierarchy.\n   Compare with what was asked; if it is wrong, go back to step 3.\n7. Capture logs if the change involves runtime behaviour; look for new errors.\n8. Report: what changed, build and test results, and the screenshot.\n\nOn a device: device tools need code signing set up in Xcode by the human. Do not change signing to make it work.\n"
    },
    {
      "path": "mcp.json",
      "role": "mcp",
      "description": "MobileBuildMCP pinned with telemetry off.",
      "skill": null,
      "agent": null,
      "install_to": {
        "claude-code": ".mcp.json",
        "codex": null,
        "cursor": ".cursor/mcp.json",
        "gemini-cli": null,
        "antigravity-cli": ".agents/mcp_config.json",
        "copilot": null
      },
      "raw_url": "https://loadout.jnw-it.com/raw/ios-mobilebuildmcp/1.0.0/mcp.json",
      "raw_latest_url": "https://loadout.jnw-it.com/raw/ios-mobilebuildmcp/latest/mcp.json",
      "bytes": 205,
      "lang": "json",
      "content": "{\n  \"mcpServers\": {\n    \"mobilebuildmcp\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"mobilebuildmcp@2.7.1\", \"mcp\"],\n      \"env\": {\n        \"MOBILEBUILDMCP_SENTRY_DISABLED\": \"true\"\n      }\n    }\n  }\n}\n"
    }
  ],
  "requires": {
    "tools": [
      "node",
      "xcode"
    ],
    "env": [],
    "mcp": [
      "mobilebuildmcp"
    ]
  },
  "tested": {
    "status": "untested",
    "last_run": null,
    "fixture": null,
    "per_agent": {
      "claude-code": "untested",
      "codex": "untested",
      "cursor": "untested",
      "gemini-cli": "untested",
      "antigravity-cli": "untested",
      "copilot": "untested"
    }
  },
  "security": {
    "scanned": true,
    "scanner": "intake-precheck/1",
    "verdict": "clean",
    "network": true,
    "scripts": [],
    "notes": "npx downloads mobilebuildmcp from npm at the pinned version. The server runs xcodebuild and simulator tools locally on macOS. Sentry error telemetry is disabled in the config."
  },
  "featured": false,
  "deprecated": false,
  "last_checked": "2026-10-17",
  "published": "2026-10-17",
  "updated": "2026-10-17",
  "compatibility": {
    "claude-code": "native",
    "codex": "adapter",
    "cursor": "native",
    "gemini-cli": "adapter",
    "antigravity-cli": "native",
    "copilot": "adapter"
  },
  "counts": {
    "rules": 1,
    "skills": 1,
    "mcp": 1
  },
  "url": "https://loadout.jnw-it.com/loadouts/ios-mobilebuildmcp/",
  "api_url": "https://loadout.jnw-it.com/api/loadouts/ios-mobilebuildmcp.json",
  "verification": {
    "level": "verified-install",
    "status": "verified",
    "label": "Verified install",
    "verified": true,
    "checked_at": "2026-10-17T08:09:30Z",
    "commit": "03c1b9839c40eb1e44c0a2877baaa3978a96895c",
    "content_current": true,
    "agent_tests": "not-run",
    "counts": {
      "pass": 9,
      "fail": 0,
      "skip": 0,
      "not_applicable": 1
    },
    "meaning": "Level 1: automated checks on the files (parse, install paths, MCP config, safety scan, references, size, licence, starter build). No AI agent was run.",
    "checks": [
      {
        "id": "listing",
        "name": "Listing",
        "status": "pass",
        "summary": "Schema valid; 5 files declared, none missing or extra",
        "details": [
          "tested.status: untested (agent tests are separate from Level 1)"
        ]
      },
      {
        "id": "parse",
        "name": "Files parse",
        "status": "pass",
        "summary": "All 5 files parse; front matter valid",
        "details": []
      },
      {
        "id": "adapters",
        "name": "Adapters",
        "status": "pass",
        "summary": "CLAUDE.md and GEMINI.md import AGENTS.md and are up to date",
        "details": [
          "CLAUDE.md: matches the generator",
          "GEMINI.md: matches the generator"
        ]
      },
      {
        "id": "install-paths",
        "name": "Install paths",
        "status": "pass",
        "summary": "Correct paths for all 6 agents; layouts re-discovered",
        "details": [
          "Claude Code: 4 files, 1 skill in .claude/skills/, MCP at .mcp.json",
          "Codex CLI: 2 files, 1 skill in .agents/skills/, MCP manual step",
          "Cursor: 3 files, 1 skill in .agents/skills/, MCP at .cursor/mcp.json",
          "Gemini CLI: 3 files, 1 skill in .agents/skills/, MCP manual step",
          "Antigravity CLI: 3 files, 1 skill in .agents/skills/, MCP at .agents/mcp_config.json",
          "GitHub Copilot: 2 files, 1 skill in .agents/skills/, MCP manual step"
        ]
      },
      {
        "id": "mcp",
        "name": "MCP config",
        "status": "pass",
        "summary": "1 server valid: mobilebuildmcp",
        "details": [
          "mcp.json → mobilebuildmcp: npm package mobilebuildmcp exists",
          "Converts to Codex config.toml, Gemini CLI settings.json, VS Code mcp.json and Antigravity CLI .agents/mcp_config.json (serverUrl)"
        ]
      },
      {
        "id": "safety",
        "name": "Safety scan",
        "status": "pass",
        "summary": "Clean: no credentials, risky shell or hidden text",
        "details": [
          "Scanner intake-precheck/1: verdict clean; network yes (listing says yes)",
          "info mcp-server in mcp.json: mobilebuildmcp: command npx -y mobilebuildmcp@2.7.1 mcp"
        ]
      },
      {
        "id": "references",
        "name": "References",
        "status": "pass",
        "summary": "2 references between files resolve for every agent",
        "details": []
      },
      {
        "id": "size",
        "name": "Size limits",
        "status": "pass",
        "summary": "5 files, 4.2 KB total; largest AGENTS.md 1.9 KB",
        "details": [
          "Limits: 30 files, 32 KB per file, 128 KB total, 500 lines per skill or rule"
        ]
      },
      {
        "id": "licence",
        "name": "Licence",
        "status": "pass",
        "summary": "MIT, by Agent Loadout; text in the repository LICENSE",
        "details": []
      },
      {
        "id": "starter-build",
        "name": "Starter build",
        "status": "n/a",
        "summary": "Not applicable: building Swift apps needs macOS with Xcode and simulators, which the Linux CI runner does not have",
        "details": [
          "MobileBuildMCP drives xcodebuild and the iOS Simulator, both macOS-only.",
          "The pinned npm package is still checked to exist, and the MCP config is converted for every agent.",
          "Every other Level 1 check still runs on this loadout."
        ]
      }
    ]
  },
  "install": {
    "claude-code": {
      "files": [
        {
          "path": "AGENTS.md",
          "target": "AGENTS.md",
          "raw_url": "https://loadout.jnw-it.com/raw/ios-mobilebuildmcp/1.0.0/AGENTS.md",
          "role": "instructions"
        },
        {
          "path": "CLAUDE.md",
          "target": "CLAUDE.md",
          "raw_url": "https://loadout.jnw-it.com/raw/ios-mobilebuildmcp/1.0.0/CLAUDE.md",
          "role": "adapter"
        },
        {
          "path": "skills/ios-build-loop/SKILL.md",
          "target": ".claude/skills/ios-build-loop/SKILL.md",
          "raw_url": "https://loadout.jnw-it.com/raw/ios-mobilebuildmcp/1.0.0/skills/ios-build-loop/SKILL.md",
          "role": "skill"
        },
        {
          "path": "mcp.json",
          "target": ".mcp.json",
          "raw_url": "https://loadout.jnw-it.com/raw/ios-mobilebuildmcp/1.0.0/mcp.json",
          "role": "mcp"
        }
      ],
      "manual_steps": [],
      "zip_url": "https://loadout.jnw-it.com/download/ios-mobilebuildmcp/claude-code.zip"
    },
    "codex": {
      "files": [
        {
          "path": "AGENTS.md",
          "target": "AGENTS.md",
          "raw_url": "https://loadout.jnw-it.com/raw/ios-mobilebuildmcp/1.0.0/AGENTS.md",
          "role": "instructions"
        },
        {
          "path": "skills/ios-build-loop/SKILL.md",
          "target": ".agents/skills/ios-build-loop/SKILL.md",
          "raw_url": "https://loadout.jnw-it.com/raw/ios-mobilebuildmcp/1.0.0/skills/ios-build-loop/SKILL.md",
          "role": "skill"
        }
      ],
      "manual_steps": [
        {
          "path": "mcp.json",
          "note": "Codex reads MCP servers from ~/.codex/config.toml (TOML, not JSON). Add each server with `codex mcp add` or copy the URL into an [mcp_servers.<name>] table.",
          "raw_url": "https://loadout.jnw-it.com/raw/ios-mobilebuildmcp/1.0.0/mcp.json"
        }
      ],
      "zip_url": "https://loadout.jnw-it.com/download/ios-mobilebuildmcp/codex.zip"
    },
    "cursor": {
      "files": [
        {
          "path": "AGENTS.md",
          "target": "AGENTS.md",
          "raw_url": "https://loadout.jnw-it.com/raw/ios-mobilebuildmcp/1.0.0/AGENTS.md",
          "role": "instructions"
        },
        {
          "path": "skills/ios-build-loop/SKILL.md",
          "target": ".agents/skills/ios-build-loop/SKILL.md",
          "raw_url": "https://loadout.jnw-it.com/raw/ios-mobilebuildmcp/1.0.0/skills/ios-build-loop/SKILL.md",
          "role": "skill"
        },
        {
          "path": "mcp.json",
          "target": ".cursor/mcp.json",
          "raw_url": "https://loadout.jnw-it.com/raw/ios-mobilebuildmcp/1.0.0/mcp.json",
          "role": "mcp"
        }
      ],
      "manual_steps": [],
      "zip_url": "https://loadout.jnw-it.com/download/ios-mobilebuildmcp/cursor.zip"
    },
    "gemini-cli": {
      "files": [
        {
          "path": "AGENTS.md",
          "target": "AGENTS.md",
          "raw_url": "https://loadout.jnw-it.com/raw/ios-mobilebuildmcp/1.0.0/AGENTS.md",
          "role": "instructions"
        },
        {
          "path": "GEMINI.md",
          "target": "GEMINI.md",
          "raw_url": "https://loadout.jnw-it.com/raw/ios-mobilebuildmcp/1.0.0/GEMINI.md",
          "role": "adapter"
        },
        {
          "path": "skills/ios-build-loop/SKILL.md",
          "target": ".agents/skills/ios-build-loop/SKILL.md",
          "raw_url": "https://loadout.jnw-it.com/raw/ios-mobilebuildmcp/1.0.0/skills/ios-build-loop/SKILL.md",
          "role": "skill"
        }
      ],
      "manual_steps": [
        {
          "path": "mcp.json",
          "note": "Gemini CLI reads MCP servers from the mcpServers block of .gemini/settings.json. Merge the servers in by hand, and use httpUrl instead of url for HTTP servers. Since 18 June 2026 Gemini CLI serves only Gemini Code Assist Standard/Enterprise licences and paid API keys; personal accounts use Antigravity CLI.",
          "raw_url": "https://loadout.jnw-it.com/raw/ios-mobilebuildmcp/1.0.0/mcp.json"
        }
      ],
      "zip_url": "https://loadout.jnw-it.com/download/ios-mobilebuildmcp/gemini-cli.zip"
    },
    "antigravity-cli": {
      "files": [
        {
          "path": "AGENTS.md",
          "target": "AGENTS.md",
          "raw_url": "https://loadout.jnw-it.com/raw/ios-mobilebuildmcp/1.0.0/AGENTS.md",
          "role": "instructions"
        },
        {
          "path": "skills/ios-build-loop/SKILL.md",
          "target": ".agents/skills/ios-build-loop/SKILL.md",
          "raw_url": "https://loadout.jnw-it.com/raw/ios-mobilebuildmcp/1.0.0/skills/ios-build-loop/SKILL.md",
          "role": "skill"
        },
        {
          "path": "mcp.json",
          "target": ".agents/mcp_config.json",
          "raw_url": "https://loadout.jnw-it.com/raw/ios-mobilebuildmcp/1.0.0/generated/antigravity-cli/mcp_config.json",
          "role": "mcp",
          "generated": true
        }
      ],
      "manual_steps": [],
      "zip_url": "https://loadout.jnw-it.com/download/ios-mobilebuildmcp/antigravity-cli.zip"
    },
    "copilot": {
      "files": [
        {
          "path": "AGENTS.md",
          "target": "AGENTS.md",
          "raw_url": "https://loadout.jnw-it.com/raw/ios-mobilebuildmcp/1.0.0/AGENTS.md",
          "role": "instructions"
        },
        {
          "path": "skills/ios-build-loop/SKILL.md",
          "target": ".agents/skills/ios-build-loop/SKILL.md",
          "raw_url": "https://loadout.jnw-it.com/raw/ios-mobilebuildmcp/1.0.0/skills/ios-build-loop/SKILL.md",
          "role": "skill"
        }
      ],
      "manual_steps": [
        {
          "path": "mcp.json",
          "note": "In VS Code, MCP servers go in .vscode/mcp.json under a \"servers\" key (not \"mcpServers\"). Copilot CLI uses ~/.copilot/mcp-config.json.",
          "raw_url": "https://loadout.jnw-it.com/raw/ios-mobilebuildmcp/1.0.0/mcp.json"
        }
      ],
      "zip_url": "https://loadout.jnw-it.com/download/ios-mobilebuildmcp/copilot.zip"
    }
  },
  "source_zip_url": "https://loadout.jnw-it.com/download/ios-mobilebuildmcp/source.zip"
}