XcodeBuildMCP
CLAUDE.md6.5k starsChanged 50 days agoMITView on GitHub
2 other projects use a version of this.
Trending
Quiet since May.about the whole repository
Most recently taken up by
- getsentry/MobileBuildMCPword for word, first seen Sep 23, 2026
- getsentry/XcodeBuildMCPword for word, first seen Sep 23, 2026
Who's talking about cameroncooke/XcodeBuildMCP
- @hieu-dinh.bsky.social“XcodeBuildMCP lets you build and run your iOS/macOS app directly through an agent in Cursor, Windsurf. What …”Bluesky · Apr 20, 2025 · 4 likes
- @iurysouza.dev“Question for our mobile devs out there: Do you have mcps or skills recommendations for tooling that closes …”Bluesky · Jan 29, 2026 · 3 likes
- @samwho.dev“Yeah for this one the only code I’ve read is the diffs as they fly past. Did most of it by voice on my …”Bluesky · Jul 6, 2025 · 2 likes
- getsentry/MobileBuildMCP“chore(deps): bump @modelcontextprotocol/sdk from 1.25.2 to 1.26.0”GitHub · Feb 4, 2026 · 1 reactions
- getsentry/MobileBuildMCP“chore(deps): bump hono from 4.11.4 to 4.11.7”GitHub · Jan 27, 2026 · 1 reactions
The biggest 5 of 21 mentions linking to the repository that our crawl found. Each line is their own headline.
See all 21
Talked about on GitHub and Bluesky (21 times).
On GitHub · 17
- Feb 4, 2026chore(deps): bump @modelcontextprotocol/sdk from 1.25.2 to 1.26.0 — getsentry/MobileBuildMCP1 reaction · 1 comment
- Jan 27, 2026chore(deps): bump hono from 4.11.4 to 4.11.7 — getsentry/MobileBuildMCP1 reaction · 1 comment
- Jan 13, 2026chore(deps): bump hono from 4.11.3 to 4.11.4 — getsentry/MobileBuildMCP1 reaction · 1 comment
- Jan 7, 2026chore(deps): bump @modelcontextprotocol/sdk from 1.25.1 to 1.25.2 — getsentry/MobileBuildMCP1 reaction · 1 comment
- Jul 31, 2025feat: Add Xcode MCP marketplace support and comprehensive proposal — RooCodeInc/Roo-Code1 reaction · 1 comment
12 more on GitHub
- Jun 11, 2025Add progress notifications for build tools — getsentry/MobileBuildMCP1 reaction · 3 comments
- May 31, 2026Broken links detected (2026-06-14) — awesome-ai-tools/curated-mcp-servers0 reactions
- Dec 16, 2025XcodeBuildMCP 1.15.0 released — SwiftOldDriver/iOS-Weekly0 reactions
- Oct 9, 2025Permanently allow specific bash commands to run outside the sandbox (like `xcodebuild ...`) — openai/codex0 reactions · 2 comments
- Sep 30, 2025[MCP Catalog] New MCP server candidate: io.github.cameroncooke/XcodeBuildMCP — obot-platform/mcp-catalog0 reactions · 1 comment
- Sep 30, 2025[MCP Catalog] New MCP server candidate: com.xcodebuildmcp/XcodeBuildMCP — obot-platform/mcp-catalog0 reactions · 1 comment
- Sep 29, 2025[MCP Catalog] New MCP server candidate: com.xcodebuildmcp/XcodeBuildMCP — obot-platform/obot0 reactions
- Sep 29, 2025[MCP Catalog] New MCP server candidate: io.github.cameroncooke/XcodeBuildMCP — obot-platform/obot0 reactions
- Jul 23, 2025[Bug]: Claude Code GitHub Workflow permissions issue — getsentry/MobileBuildMCP0 reactions · 6 comments
- Jun 9, 2025Parsing error in swift-collections package — cameroncooke/xcodemake0 reactions
- May 13, 2025Application for XcodeBuildMCP — 1Password/for-open-source0 reactions · 2 comments
- Mar 28, 2025[Server Submission]: XcodeBuild MCP — cline/mcp-marketplace0 reactions · 2 comments
On Bluesky · 4
- Apr 20, 2025XcodeBuildMCP lets you build and run your iOS/macOS app directly through an agent in Cursor, Windsurf. What a great addition to the Xcode… — @hieu-dinh.bsky.social4 likes and reposts
- Jan 29, 2026Question for our mobile devs out there: Do you have mcps or skills recommendations for tooling that closes the agentic Loop? I just heard… — @iurysouza.dev3 likes and reposts · 1 reply
- Jul 6, 2025Yeah for this one the only code I’ve read is the diffs as they fly past. Did most of it by voice on my laptop this afternoon. Only notable… — @samwho.dev2 likes and reposts
- Mar 28, 2025Or use XcodeBuildMCP Cameron Cooke to run the app directly from Claude: "Can you build and run my macOS app?" github.com/cameroncook... — @tuist.dev0 likes and reposts · 1 reply
Other versions2 projects use a version of this.
Word for word · 2
- getsentry/MobileBuildMCP★ 6.5k100% same
- getsentry/XcodeBuildMCP★ 6.5k100% same
Edited · 0
None found.
Wrote their own version · 0
None found.
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository14 other files it gives its agents.
- AGENTS.mdAGENTS.md
- mobilebuildmcp-docs-command-reviewSkill
- mobilebuildmcp-docs-release-reviewSkill
- mobilebuildmcp-packaging-resource-reviewSkill
- mobilebuildmcp-rendering-streaming-reviewSkill
- mobilebuildmcp-runtime-boundary-reviewSkill
- mobilebuildmcp-snapshot-fixture-reviewSkill
- mobilebuildmcp-structured-output-reviewSkill
- mobilebuildmcp-test-boundary-reviewSkill
- mobilebuildmcp-tool-contract-reviewSkill
- wardenSkill
- warden-sweepSkill
- mobilebuildmcp-cliSkill
- mobilebuildmcpSkill
The file
Show its rules and text
We split this CLAUDE.md into the rules it gives an agent
27 rules. About 0 are common, 18 are distinctive, and 9 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈18
Distinctive · estimate
This author's own choices. Worth a look.
9
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 5
Check node_modules for external API type definitions instead of guessing
- Distinctive: line 7
NEVER remove or downgrade code to fix type errors from outdated dependencies.
- Distinctive: line 8
Always ask before removing functionality or code that appears to be intentional
- Distinctive: line 11
Verify standard quality commands include every changed path and exercise exact entry points and argument variants.
- Distinctive: line 18
NEVER commit unless user asks
- Distinctive: line 22
Always read all comments on the issue -
- Very specific: line 28
When working on skill sources in skills/, use the skill-creator skill workflow.
- Very specific: line 29
After modifying any skill source, run npx skill-check <skill-directory> and address all errors/warnings before handoff.
- Very specific: line 30
Before handoff, run the matching manual Warden review for high-risk changes: runtime/CLI/daemon boundaries → …
- Distinctive: line 35
Use workspace-key scoped directories for workspace-owned state.
- Very specific: line 36
Do not store runtime state under ~/.mobilebuildmcp.
- Distinctive: line 37
Use shared lock and atomic-write helpers for mutable shared files.
- Distinctive: line 38
Prefer one-record-per-file registries over shared aggregate files.
- Distinctive: line 43
Keep answers short and concise
- Distinctive: line 44
No emojis in commits, issues, PR comments, or code
- Distinctive: line 45
No fluff or cheerful filler text
- Distinctive: line 49
Do not commit transient investigation notes, prompt exports, or scratch analysis docs after the work is complete.
- Distinctive: line 50
If an investigation leaves unresolved follow-up work, move it to a GitHub issue instead of preserving the transient doc in the branch.
- Very specific: line 57
Use these sections under ## [Unreleased]:
- Very specific: line 64
Before adding entries, read the full [Unreleased] section to see which subsections already exist
- Very specific: line 67
NEVER modify already-released version sections (e.g., ## [0.12.2])
- Distinctive: line 69
NEVER update snapshot fixtures unless asked to do so, these are integration tests, on failure assume code is wrong before questioning the …
- Very specific: line 88
When running long test suites (snapshot tests, smoke tests), ALWAYS write full output to a log file and read it afterwards.
- Distinctive: line 90
If you need a summary, read the log file and grep/filter it — the full output is always preserved.
- Very specific: line 93
Do NOT just kill the run — first inspect the process tree (ps -ef | grep -E "vitest|xcodebuild|simctl|devicectl") to identify what's stuck.
- Distinctive: line 96
When asked to review changes or test failures, focus on regressions: behavior changes caused by the branch.
- Distinctive: line 99
NEVER use sed/cat to read a file or a range of a file.
≈ “Common” is an estimate: at least 1 in 5 of the 26,980 CLAUDE.md files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Development Rules
Code Quality
- No
anytypes unless absolutely necessary - Check node_modules for external API type definitions instead of guessing
- NEVER use inline imports - no
await import("./foo.js"), noimport("pkg").Typein type positions, no dynamic imports for types. Always use standard top-level imports. - NEVER remove or downgrade code to fix type errors from outdated dependencies; upgrade the dependency instead
- Always ask before removing functionality or code that appears to be intentional
- Do not add fallback behavior by default. If required context, configuration, runtime state, or dependencies are missing, fail loudly and fix the caller/setup instead of silently switching to an alternate path. Add a fallback only when explicitly requested or when it is a documented product requirement.
- Review the complete merge-base diff and trace changed or reused helper contracts, including error and sentinel returns, through callers, consumers, tests, and operational configuration.
- Verify standard quality commands include every changed path and exercise exact entry points and argument variants; validate explicitly when they do not.
- For asynchronous, workflow, or process-boundary changes, enumerate lifecycle states, retries, supersession, and race transitions; test terminal outcomes and missing or optional metadata.
Test Conventions
- Snapshot tests (
*.snapshot.test.ts) must only assert generated tool output against fixtures. Move helper, parser, schema, setup, or behavior assertions to non-snapshot unit/integration tests.
Commands
- NEVER commit unless user asks
GitHub
When reading issues:
- Always read all comments on the issue
Tools
- GitHub CLI for issues/PRs
- MCP
readOnlyHintdescribes whether a tool mutates host/project state such as files, build artifacts, configuration, or external services. Simulator HID/UI actions that only tap, type, press, or gesture inside the simulator may remainreadOnlyHint: true; do not flip them tofalsemerely because app UI state changes. - CLI design note: do not rely on CLI session-default writes. CLI is intentionally deterministic for CI/scripting and should use explicit command arguments as the primary input surface.
- When working on skill sources in
skills/, use theskill-creatorskill workflow. - After modifying any skill source, run
npx skill-check <skill-directory>and address all errors/warnings before handoff. - Before handoff, run the matching manual Warden review for high-risk changes: runtime/CLI/daemon boundaries →
mobilebuildmcp-runtime-boundary-review; test infrastructure or harnesses →mobilebuildmcp-test-boundary-review; tool manifests, schemas, or contracts →mobilebuildmcp-tool-contract-review. Invoke only applicable skills withwarden --skill <name>.
Multi-process filesystem state
- MobileBuildMCP explicitly supports multiple concurrent MCP server, daemon, CLI, test, and helper processes for the same or different workspaces.
- Shared filesystem state under
~/Library/Developer/MobileBuildMCPmust be multi-process safe. - Use workspace-key scoped directories for workspace-owned state.
- Do not store runtime state under
~/.mobilebuildmcp;.mobilebuildmcp/config.yamlis only project configuration. - Use shared lock and atomic-write helpers for mutable shared files.
- Prefer one-record-per-file registries over shared aggregate files.
- Cleanup must verify ownership before deleting shared artifacts.
- User-facing artifact/log paths in final text or structured output must use
displayPath()fromsrc/utils/build-preflight.ts, so paths are cwd-relative when possible or~/...instead of absolute home paths. Keep stored files at their real absolute paths; only normalize response/display values.
Style
- Keep answers short and concise
- No emojis in commits, issues, PR comments, or code
- No fluff or cheerful filler text
- Technical prose only, be kind but direct (e.g., "Thanks @user" not "Thanks so much @user!")
Docs
- Do not commit transient investigation notes, prompt exports, or scratch analysis docs after the work is complete.
- If an investigation leaves unresolved follow-up work, move it to a GitHub issue instead of preserving the transient doc in the branch.
- Structured output JSON schemas are auto-published to the website/public schema mirror when merged; do not manually update public schema copies unless explicitly asked.
Changelog
Location: CHANGELOG.md
Format
Use these sections under ## [Unreleased]:
### Added- New features### Changed- Changes to existing functionality### Fixed- Bug fixes### Removed- Removed features
Rules
- Before adding entries, read the full
[Unreleased]section to see which subsections already exist - New entries ALWAYS go under
## [Unreleased]section - Append to existing subsections (e.g.,
### Fixed), do not create duplicates - NEVER modify already-released version sections (e.g.,
## [0.12.2]) - Each version section is immutable once released
- NEVER update snapshot fixtures unless asked to do so, these are integration tests, on failure assume code is wrong before questioning the fixture
Attribution
- Internal changes (from issues):
Fixed foo bar ([#123](https://github.com/getsentry/MobileBuildMCP/issues/123)) - External contributions:
Added feature X ([#456](https://github.com/getsentry/MobileBuildMCP/pull/456) by [@username](https://github.com/username))
Rendering and Streaming Contract
- Streaming fragments are transient live-progress output only. They may be displayed while a tool is running, but MUST NOT provide final settled MCP/JSON/CLI text.
- Final settled output MUST render from the final structured/domain result and next-step metadata. If final output needs data, add it to the final result type instead of reading it from fragments.
- Streaming-capable renderers may observe fragment callbacks only for live progress. Fragment handling must not affect final structured output or final settled text.
Error Handling
- Structured errors (domain results with
didError) are for domain errors only: failures in the user's build/test/device/simulator workflow (compile errors, test failures, missing destinations, etc.). - System errors with the MCP server or CLI itself (invalid internal state, unresolvable configuration, infrastructure failures) must NOT be wrapped in structured domain results — let them surface as runtime tool errors so they are clearly distinguishable from workflow outcomes.
Test Execution Rules
- NEVER run the snapshot or smoke test suites without explicit user permission. They are expensive (~7 min baseline, spawn real
xcodebuild/simctl/devicectlprocesses and can wedge). This coversnpm run test:snapshot,npm run test:smoke, and any directvitest run --config vitest.snapshot.config.ts/vitest.smoke.config.tsinvocation. Ask first, then run only if the user agrees. - The default unit suite (
npm test/vitest run),npm run typecheck,npm run lint, andnpm run buildare cheap and may be run freely without asking. - When running long test suites (snapshot tests, smoke tests), ALWAYS write full output to a log file and read it afterwards. NEVER pipe through
tailorgrepdirectly — that loses output you may need to debug failures. - Pattern:
DEVICE_ID=... npm run test:snapshot 2>&1 | tee /tmp/snapshot-results.txtthen read/tmp/snapshot-results.txtwith the native read tool. - If you need a summary, read the log file and grep/filter it — the full output is always preserved.
- Snapshot test command:
DEVICE_ID=<YOUR_DEVICE_ID> npm run test:snapshot - Snapshot suite expected duration: ~7 min baseline (measured at 423s). Anything longer than ~10 min should be treated as a likely hang, not a slow run.
- Do NOT just kill the run — first inspect the process tree (
ps -ef | grep -E "vitest|xcodebuild|simctl|devicectl") to identify what's stuck. - Common hang causes: locked physical device, stale simulator state,
devicectl diagnosewaiting for password, orphaned daemon process. - Capture what you find before killing, so the root cause can be fixed rather than papered over.
- Do NOT just kill the run — first inspect the process tree (
- When asked to review changes or test failures, focus on regressions: behavior changes caused by the branch. Do not treat known/acceptable test flakes, environment setup issues, or nondeterministic tool output churn as regressions unless explicitly asked to investigate them.
CRITICAL Tool Usage Rules CRITICAL
- NEVER use sed/cat to read a file or a range of a file. Always use the native read tool.
- You MUST read every file you modify in full before editing.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

