두 개의 MCP 서버로 Claude Code를 iOS 빌드 시스템으로 만들기
Xcode MCP 서버 없이 iOS 프로젝트를 향한 Claude Code 세션은 눈을 가린 것과 같습니다. 에이전트는 Swift 파일을 읽고, Swift 파일을 작성하고, Bash 도구를 통해 xcodebuild를 실행할 수 있지만, 빌드 오류가 발생할 때마다 수천 줄의 비구조화된 출력을 파싱해야 합니다. 시뮬레이터 관리는 xcrun simctl 명령어를 그대로 사용해야 합니다. 테스트 결과는 에이전트가 실패를 찾기 위해 스캔해야 하는 텍스트 벽으로 도착합니다.
두 개의 MCP 서버를 추가하면 Claude Code에 완전한 Xcode 통합을 제공할 수 있습니다: XcodeBuildMCP (v2.3.2는 빌드, 테스트, 시뮬레이터, LLDB 디버깅에 걸쳐 82개 도구를 제공합니다)와 Xcode 26.3과 함께 출시된 Apple의 네이티브 Xcode MCP (파일 작업, 진단, SwiftUI 미리보기를 위한 20개 도구). 각각 단일 claude mcp add 명령어가 필요합니다. 이 둘은 함께 비구조화된 빌드 로그 파싱을 구조화된 JSON 응답으로 대체하여, 에이전트에게 정확한 오류 위치, 메서드별 테스트 결과, 그리고 프로그래밍 방식의 시뮬레이터 제어를 제공합니다.
두 개의 claude mcp add 명령어가 그것을 바꿨습니다. MCP (Model Context Protocol)는 modelcontextprotocol.io에 명세된 개방형 표준으로, AI 에이전트가 구조화된 JSON 요청과 응답을 통해 외부 시스템의 도구를 호출할 수 있게 해줍니다: REST API과 같은 아이디어이지만, 에이전트와 도구 간 통신을 위해 설계되었습니다.5
요약
XcodeBuildMCP (오픈 소스, 현재 v2.3.2 문서 기준 82개 MCP 도구)는 Xcode를 실행하지 않고도 빌드, 테스트, 시뮬레이터, 실제 기기 배포, LLDB 디버깅을 처리합니다. Apple의 네이티브 Xcode MCP (20개 도구, Xcode 26.3과 함께 xcrun mcpbridge로 출시)은 실행 중인 Xcode 프로세스에 연결하여 파일 작업, 실시간 진단, 문서 검색, Swift REPL, SwiftUI 미리보기를 제공합니다. 이 둘은 함께 Claude Code에 iOS 개발 도구 체인에 대한 완전한 프로그래밍 방식 액세스를 제공합니다: 로그 파싱 대신 구조화된 JSON, 셸 명령어 대신 도구 호출. 설정은 2분도 걸리지 않습니다.
격차
Claude Code는 Swift 읽기와 쓰기에 탁월합니다. SwiftUI 패턴, SwiftData 관계, Swift 6 동시성을 이해합니다. 하지만 빌드 시스템에는 눈이 멀어 있었습니다.
빌드가 실패하면 에이전트는 다음을 해야 했습니다:
- Bash를 통해
xcodebuild실행 - 수천 줄의 비구조화된 출력 파싱
- 잡음 속에서 실제 오류를 찾기를 희망
- 어느 파일과 줄이 실패를 일으켰는지 추측
테스트를 실행하려고 할 때:
- 에이전트가 메모리에서 전체
xcodebuild test명령어를 구성 - xcresult 번들을 파싱 (또는 더 가능성 있게는 원시 stdout)
- 어떤 테스트가 통과하고 어떤 테스트가 실패했는지 파악하려고 시도
이 워크플로우는 개발자에게 컴파일러 출력을 열쇠 구멍을 통해 읽으면서 코드를 작성하라고 요청하는 것과 같았습니다. 정보는 기술적으로 거기에 있었지만, 인터페이스가 잘못되어 있었습니다.
해결책: 두 개의 보완적인 MCP 서버
XcodeBuildMCP (커뮤니티, 오픈 소스)
XcodeBuildMCP는 xcodebuild와 관련 도구를 구조화된 MCP 도구로 래핑합니다 (현재 v2.3.2 카탈로그에 82개). 에이전트는 build_sim을 호출하고 3,000줄의 빌드 로그가 아닌, 분류된 오류, 경고, 파일 위치가 포함된 JSON를 응답으로 받습니다.
주요 도구:
| 도구 | 기능 |
|---|---|
build_sim / build_device |
구조화된 오류 출력으로 시뮬레이터 또는 기기용 빌드 |
test_sim |
테스트 메서드별 통과/실패 결과로 테스트 실행 |
list_sims / boot_sim |
시뮬레이터 라이프사이클 관리 |
discover_projs / list_schemes |
프로젝트 인트로스펙션 |
debug_attach_sim / debug_stack |
중단점과 변수 검사를 통한 LLDB 디버깅 |
snapshot_ui / screenshot |
UI 자동화 및 시각적 캡처 |
설치:
claude mcp add XcodeBuildMCP \
-s user \
-e XCODEBUILDMCP_SENTRY_DISABLED=true \
-- npx -y xcodebuildmcp@latest mcp
-s user 플래그는 이를 전역으로 만들어, 프로젝트별 구성 없이 모든 프로젝트에서 사용할 수 있게 합니다. 환경 변수는 텔레메트리를 비활성화합니다 (기본값은 충돌 보고서를 Sentry로 전송하며, 옵트아웃은 일회성 위생 단계입니다).1
Apple Xcode MCP (네이티브, Xcode 26.3과 함께 출시)
Apple은 Xcode 26.3에서 xcrun mcpbridge를 통해 자체 MCP 서버를 출시했습니다. 이는 XPC를 통해 Xcode 프로세스에 직접 연결되는 20개 도구를 제공합니다. 중요한 주의 사항: Apple은 2026년 5월 기준으로 MCP 서버에 대한 독립적인 문서를 게시하지 않았습니다. 아래 도구 목록은 저자의 테스트와 Rudrank Riyam의 초기 분석을 기반으로 합니다. 도구 이름과 기능은 향후 Xcode 릴리스에서 변경될 수 있습니다:
| 카테고리 | 주요 도구 |
|---|---|
| 파일 작업 | XcodeRead, XcodeWrite, XcodeUpdate, XcodeGlob, XcodeGrep |
| 빌드 및 테스트 | BuildProject, GetBuildLog, RunAllTests, RunSomeTests |
| 진단 | XcodeListNavigatorIssues, XcodeRefreshCodeIssuesInFile |
| 코드 및 문서 | ExecuteSnippet (Swift REPL), DocumentationSearch, RenderPreview |
설치:
claude mcp add --transport stdio xcode -s user -- xcrun mcpbridge
Xcode 26.3 이상이 필요합니다.
왜 둘 다인가요?
빌드와 테스트에서 겹치지만, 아키텍처가 다릅니다:
- XcodeBuildMCP는
xcodebuildCLI를 통해 독립적으로 작동하며, 실행 중인 Xcode 프로세스가 필요하지 않습니다. 카탈로그는 광범위하며 (v2.3.2 기준 82개 MCP 도구) 시뮬레이터, 실제 기기, LLDB 디버깅, UI 자동화, 프로젝트 스캐폴딩을 포함합니다. 독립적인 아키텍처는 헤드리스 워크플로우를 가능하게 하기 때문에 중요합니다: 에이전트는 Xcode를 열지 않고도 빌드와 테스트를 할 수 있어 더 빠르고 시스템 메모리를 적게 소비합니다. - Apple Xcode MCP는 실행 중인 Xcode 인스턴스가 필요하며 XPC (Apple의 프로세스 간 통신 프레임워크)를 통해 통신합니다. Xcode 프로젝트 컨텍스트 내의 파일 작업, 실시간 코드 진단 (단순한 빌드 출력이 아님), WWDC 세션을 포함한 네이티브 문서 검색을 제공합니다. XPC 브리지는 CLI 도구가 액세스할 수 없는 Xcode의 내부 상태 (실시간 진단, 해결된 심볼, 미리보기 렌더링)를 노출하기 때문에 중요합니다.
저는 둘 다 사용합니다: 빌드-테스트-디버그 사이클에는 XcodeBuildMCP (Xcode를 열지 않고도 작동)을 사용하고, 문서 조회, Swift REPL 검증, SwiftUI 미리보기 렌더링이 필요할 때는 Apple의 MCP를 사용합니다.
AI 에이전트가 Bash를 통해 xcodebuild를 실행할 때, 비구조화된 텍스트 스트림을 받고 휴리스틱하게 파싱해야 하며, 오류가 어디서 시작하고 끝나는지 추측하고, 부분 일치에서 파일 경로를 추론하고, 형식이 변경되지 않기를 희망해야 합니다. 같은 에이전트가 MCP를 통해 build_sim을 호출하면, 분류된 오류, 경고, 파일 경로, 줄 번호가 예측 가능한 필드에 있는 JSON 응답을 받습니다. 에이전트의 작업은 파싱에서 추론으로 이동합니다. 그 차이는 LLM 기반 에이전트에게 더 중요합니다: 비구조화된 빌드 출력의 모든 문자가 컨텍스트 윈도우 토큰을 소비하므로, 3,000줄의 빌드 로그는 에이전트가 중요한 단 하나의 오류를 찾기 전에 작업 메모리를 소진할 수 있습니다. 구조화된 JSON 응답을 통해 에이전트는 오류를 검색하는 대신 직접 읽을 수 있습니다. MCP는 에이전트를 더 똑똑하게 만들지 않습니다. 에이전트가 받는 정보를 읽을 수 있게 만듭니다.
실제 테스트
저는 이 프롬프트를 사용하여 Water 앱 (SwiftUI + Metal 유체 시뮬레이션 + HealthKit)에서 전체 상태 점검을 실행했습니다:
Use the XcodeBuildMCP and Apple Xcode MCP tools to do a full
health check of this project:
1. List available simulators and boot an iPhone 16 Pro
2. Build the project for that simulator
3. Run existing tests and report pass/fail results
4. Search Apple docs for "HealthKit water intake"
5. Use the Swift REPL to verify HKQuantityType(.dietaryWater)
무엇이 일어났는가
시뮬레이터 설정은 list_sims, session_set_defaults, boot_sim을 사용했습니다. 에이전트는 iOS 26 런타임에 iPhone 16 Pro가 존재하지 않는다는 것을 발견했고 (단종됨), 자동으로 iPhone 17 Pro로 전환했습니다. 이러한 자동 폴백은 하드코딩된 xcodebuild 명령어로는 깨지는 종류의 적응형 동작입니다.
빌드는 처음에는 실패했는데, 새로운 Xcode 설치에 Metal Toolchain이 다운로드되지 않았기 때문입니다. 에이전트는 구조화된 오류 출력에서 이를 감지하고 xcodebuild -downloadComponent MetalToolchain을 실행하여 수정했습니다. 그런 다음 빌드는 3개의 경고와 함께 성공했습니다:
HomeView.swift:132 UIScreen.main deprecated in iOS 26.0
LogWaterIntent.swift:61 Result of try? is unused
구조화된 출력은 이러한 정보가 로그에 묻혀 있지 않고, 정확한 파일:줄 참조와 함께 분류된 경고로 돌아왔다는 것을 의미합니다.
테스트는 실패했지만, 그 실패는 유익했습니다. 구조화된 출력은 5개의 테스트 메서드가 이전 커밋에서 제거한 메서드인 injectTapRipple(atNormalizedX:)를 참조한다는 것을 보여주었습니다. 에이전트는 정확한 커밋 (7657068, "remove tap ripple interaction entirely")을 식별하고 어떤 테스트를 업데이트해야 하는지 나열했습니다. 모호함은 없었습니다.
문서 검색과 Swift REPL은 HKQuantityType(.dietaryWater)가 유효함을 확인했으며, 식별자 HKQuantityTypeIdentifierDietaryWater를 반환했습니다.
결과 표
| 단계 | 상태 | 사용된 MCP 도구 |
|---|---|---|
| 시뮬레이터 부팅 | iPhone 17 Pro (iOS 26.2) | list_sims, session_set_defaults, boot_sim |
| 빌드 | 통과 (경고 3개) | build_sim, discover_projs, list_schemes |
| 테스트 | 실패 (오래된 테스트 참조) | test_sim |
| HealthKit 문서 | 조사됨 | DocumentationSearch |
| Swift REPL | 검증됨 | ExecuteSnippet |
전체 상태 점검은 시뮬레이터 부팅 시간을 포함하여 약 90초 만에 자율적으로 실행되었습니다. 저는 Xcode를 열지 않았고, 어떤 오류 메시지도 복사하지 않았으며, 어떤 xcodebuild 명령어도 구성하지 않았습니다. MCP 이전에는 같은 5단계 상태 점검에 약 8-10분의 적극적인 인간 참여가 필요했습니다: xcodebuild 명령어 작성, 출력 파싱, 문서 검색을 위해 Xcode로 전환, REPL 검증을 위해 Swift Playgrounds 열기. 시간 절감은 더 빠른 빌드에서 오는 것이 아니라 (빌드는 같은 시간이 걸립니다) 각 단계 사이의 인간 개입 파싱 단계를 제거하는 데서 옵니다.
구조화 vs. 비구조화: 에이전트가 실제로 보는 것
차이는 구체적입니다. 다음은 두 인터페이스를 통한 동일한 빌드 오류입니다:
Bash 경유 (xcodebuild 원시 출력), 하나의 오류를 둘러싼 47줄의 잡음:
CompileSwift normal arm64 /Users/.../HomeView.swift
...
/Users/blake/Projects/Water/Water/Views/HomeView.swift:132:9:
warning: 'main' is deprecated: Use UIScreen.main in iOS 16.0+
^~~~~~~~
** BUILD FAILED **
The following build commands failed:
CompileSwift normal arm64 .../FluidRenderer.swift
...
에이전트는 수천 줄을 파싱하고, 오류가 어디서 시작하고 끝나는지 추측하고, 부분 일치에서 파일 경로를 추론해야 하며, 모든 잡음 줄에 대해 컨텍스트 윈도우 토큰을 소비합니다.
MCP 경유 (build_sim 구조화된 응답), 예측 가능한 필드의 정확한 오류 (설명을 위해 단순화됨; 실제 응답에는 빌드 시간 및 스킴과 같은 추가 필드가 포함됩니다):
{
"status": "failed",
"errors": [{
"file": "FluidRenderer.swift",
"line": 89,
"message": "Cannot find 'MTLPixelFormat' in scope",
"severity": "error"
}],
"warnings": [{
"file": "HomeView.swift",
"line": 132,
"message": "'main' is deprecated in iOS 26.0",
"severity": "warning"
}]
}
에이전트는 오류를 직접 읽고, 파일과 줄을 식별하고, 수정에 대해 추론하기 시작합니다. 파싱 없음, 추측 없음, 토큰 낭비 없음. 컨텍스트 윈도우 비용은 수천 토큰에서 수십 토큰으로 떨어집니다.
에이전트 가르치기
MCP 서버를 설치하는 것만으로는 충분하지 않습니다. 에이전트는 도구가 존재하고 언제 원시 셸 명령어보다 선호해야 하는지 알아야 합니다. 저는 명시적인 지침을 포함하도록 ios-developer 에이전트 정의를 업데이트했습니다:
## Build & Test Tools (XcodeBuildMCP)
Prefer MCP tools over raw xcodebuild commands:
- **Build**: Use `build_sim` / `build_device` for structured errors
- **Test**: Use `test_sim` / `test_device` for pass/fail results
- **Simulators**: Use `list_sims`, `boot_sim`, `open_sim`
- **Debug**: Use `debug_attach_sim`, `debug_stack`, `debug_variables`
## Apple Xcode MCP (mcpbridge)
- **Documentation**: Use `DocumentationSearch` for Apple docs
- **Swift REPL**: Use `ExecuteSnippet` for API verification
- **Previews**: Use `RenderPreview` for headless SwiftUI rendering
Prefer these over WebSearch for Apple API questions
and over Bash `swift` for REPL tasks.
이것이 없으면 에이전트는 때때로 Bash를 통해 xcodebuild로 폴백하거나 네이티브 검색 대신 Apple 문서를 위해 WebSearch를 사용합니다. 에이전트 정의가 그 격차를 메웁니다.2 후크, 스킬, 규칙과 함께 에이전트 정의를 구조화하는 것에 대한 더 광범위한 관점은 Claude Code 가이드에서 전체 구성 계층을 다룹니다.
실무에서 무엇이 변하는가
MCP 이전에 Claude Code와의 iOS 워크플로우는 다음과 같았습니다:
- Claude로 코드 작성
- Xcode에서 수동으로 빌드 (또는 터미널에서 xcodebuild 사용)
- 오류를 Claude로 다시 복사
- 반복
MCP 이후:
- 원하는 것을 설명합니다
- Claude가 코드를 작성하고, 빌드하고, 오류를 읽고, 수정하고, 테스트를 실행하고, API 동작을 검증합니다
- 저는 최종 결과를 검토합니다
저의 적극적인 참여가 필요했던 빌드-오류-수정 루프가 이제 자율적으로 일어납니다. 에이전트는 원시 텍스트에서 무엇이 잘못되었는지 추측하지 않고, 무엇이 어디서 왜 실패했는지 정확히 알려주는 구조화된 데이터를 읽습니다.
돌파구는 AI를 더 똑똑하게 만드는 것이 아니라, AI에게 개발자들이 이미 사용하는 도구에 대한 구조화된 액세스를 제공하는 것입니다. MCP는 이를 가능하게 하는 프로토콜이며, 마치 hooks가 Claude Code에 결정론적 가드레일을 제공한 것처럼 (구현 세부 사항은 hooks 튜토리얼 참조), MCP는 결정론적 도구 인터페이스를 제공합니다. Xcode는 MCP를 통해 자신을 노출하는 첫 번째이자 마지막 개발 도구가 아닐 것입니다.3
다른 개발자들도 MCP 기반 빌드 시스템에서 유사한 결과를 보고합니다. Rudrank Riyam의 Apple Xcode MCP 도구에 대한 자세한 안내는 여기서 설명한 문서 검색과 Swift REPL 기능을 확인했으며, 같은 XPC 종속성 제한을 언급했습니다.6 더 광범위한 MCP 생태계에는 이제 Docker, PostgreSQL, GitHub, Kubernetes를 위한 서버가 포함되어 있으며, 각각 CLI 도구를 구조화된 JSON 인터페이스로 래핑하는 동일한 패턴을 따릅니다.7 Apple의 “Meet agentic coding in Xcode” Tech Talk (Xcode 26.3 에이전틱 기능을 다룸)는 이 기능을 AI 지원 개발에 대한 Apple의 더 광범위한 투자의 일환으로 소개했으며, MCP를 틈새 프로토콜이 아닌 AI 에이전트와 개발 도구 간의 표준 인터페이스로 자리매김했습니다.8
구조화된 인터페이스로 인한 효율성 향상은 AI 도구 사용에 대한 더 광범위한 연구와 일치합니다. Jimenez 등의 SWE-bench (2024)는 구조화된 도구 (파일 수준 편집 도구, 구조화된 출력을 가진 테스트 러너)에 액세스할 수 있는 에이전트가 비구조화된 출력을 가진 bash 명령어로 제한된 에이전트보다 훨씬 더 많은 GitHub 이슈를 해결했음을 발견했습니다.9 이 패턴은 Xcode에 국한되지 않습니다: 구조화된 도구 액세스는 에이전트의 작업을 파싱에서 추론으로 이동시키기 때문에 모든 영역에서 에이전트 성능을 향상시킵니다.
한계와 현재의 격차
MCP는 만능 해결책이 아닙니다. 할 수 없는 것에 대한 솔직한 회계:
시각적 디버깅 없음. MCP는 빌드 오류와 테스트 결과에 대한 구조화된 데이터를 반환하지만, 앱의 시각적 상태를 보여줄 수는 없습니다. 뷰가 10픽셀 비뚤어지게 렌더링되는 레이아웃 버그는 빌드 오류를 생성하지 않으며 모든 로직 테스트를 통과합니다. XcodeBuildMCP의 screenshot과 snapshot_ui 도구는 화면을 캡처하지만, 시각적 정확성을 해석하려면 여전히 인간의 검토 (또는 별도의 비전 모델)가 필요합니다. 에이전트는 빌드, 실행, 테스트할 수 있지만, 볼 수는 없습니다.
Apple MCP의 Xcode 프로세스 종속성. Apple의 xcrun mcpbridge는 실행 중인 Xcode 인스턴스가 필요합니다. Xcode가 충돌하거나 닫히면 해당 서버를 통한 MCP 호출은 성공을 멈춥니다 (브리지는 Xcode의 프로세스에 의존합니다). XcodeBuildMCP는 xcodebuild를 직접 사용하여 이를 피하지만, Xcode의 XPC 인터페이스에 연결되는 모든 도구는 Xcode의 프로세스 라이프사이클을 상속합니다. 실용적인 의미는 문서 검색이나 SwiftUI 미리보기를 사용하는 세션 동안 Xcode를 열어두는 것입니다.
증분 빌드 인식 없음. build_sim 도구는 전체 빌드를 실행합니다. 이전 빌드가 성공했고 단 하나의 파일만 변경되었는지 알지 못합니다. 에이전트는 호출할 때마다 처음부터 다시 빌드합니다. 큰 프로젝트의 경우, 이는 증분 빌드 지원이 있는 xcodebuild와 비교하여 빌드 사이클당 눈에 띄는 초가 추가됩니다. 오버헤드는 구조화된 출력에 대해 허용 가능하지만, 실제 비용입니다.
Apple MCP 도구 불안정성. 연결하는 모든 MCP 서버는 확장하는 신뢰 경계이며, 보안 영향은 실제입니다. MCP 공격 표면 분석은 생태계 전반에 걸친 50개의 취약성을 문서화합니다. Apple은 공개 문서 없이 Xcode 26.3에서 MCP 서버를 출시했습니다. 도구 이름, 매개변수 형식, 응답 구조는 향후 Xcode 릴리스에서 사용 중단 경고 없이 변경될 수 있습니다. 특정 Apple MCP 도구 시그니처에 의존하는 모든 코드는 잠정적인 것으로 취급되어야 합니다. XcodeBuildMCP는 오픈 소스이며 커뮤니티에서 유지 관리되므로, 시맨틱 버전 관리와 변경 로그를 통해 더 안정적인 인터페이스를 제공합니다.4
코드 서명 진단 없음. 프로비저닝 프로파일 오류, 인증서 불일치, 권한 충돌은 iOS 개발에서 가장 불투명한 빌드 실패 중 일부를 생성합니다. 두 MCP 서버 모두 원시 오류 메시지를 넘어 코드 서명 문제에 대한 구조화된 진단을 제공하지 않습니다. 에이전트는 파일 경로와 함께 “Code signing failed”를 받지만, “프로비저닝 프로파일이 2월 15일에 만료되었습니다” 또는 “이 권한에는 특정 App ID 접두사가 필요합니다”는 받지 못합니다. 코드 서명은 여전히 수동 디버깅 영역으로 남아 있습니다.
설정 체크리스트
iOS 프로젝트로 Claude Code를 실행하는 모든 사람을 위해:
-
XcodeBuildMCP 설치 (Xcode 16+, macOS 14.5+ 필요):
bash claude mcp add XcodeBuildMCP -s user \ -e XCODEBUILDMCP_SENTRY_DISABLED=true \ -- npx -y xcodebuildmcp@latest mcp -
Apple Xcode MCP 설치 (Xcode 26.3+ 필요):
bash claude mcp add --transport stdio xcode \ -s user -- xcrun mcpbridge -
둘 다 연결되었는지 확인:
bash claude mcp list # XcodeBuildMCP: ... - Connected # xcode: xcrun mcpbridge - Connected -
에이전트 정의 업데이트하여 새 도구를 참조 (그렇지 않으면 에이전트는 때때로 셸 명령어로 폴백합니다).
-
새로운 Claude Code 세션 시작, 세션 중간에 등록된 MCP 도구는 다시 시작할 때까지 도구 검색에 나타나지 않습니다.
그게 전부입니다. 두 개의 명령어로 완전한 iOS 빌드 시스템 액세스가 가능합니다.
설정 후 시도해 보세요: Claude Code에게 “이 프로젝트를 시뮬레이터용으로 빌드하고 오류를 보고해주세요”라고 요청하세요. 응답을 Bash를 통해 xcodebuild -scheme YourScheme -sdk iphonesimulator build를 실행한 결과와 비교하세요. MCP 응답은 구조화된 필드에서 파일과 심각도별로 오류를 분류합니다. 원시 xcodebuild 출력은 동일한 정보를 수천 줄의 인터리브된 컴파일러 출력에 묻어버립니다. 차이는 첫 번째 빌드 오류에서 즉시 보입니다.
핵심 요점
AI 에이전트를 사용하는 iOS 개발자를 위해:
-
구조화된 도구 액세스는 에이전트가 할 수 있는 것을 변화시킵니다. “에이전트가 코드를 작성하고 당신이 그것을 빌드하기를 희망함”과 “에이전트가 코드를 작성하고, 빌드하고, 오류를 읽고, 수정함” 사이의 격차는 텍스트 완성 도구와 개발 파트너 사이의 격차입니다. MCP는 비구조화된 빌드 로그 대신 구조화된 JSON를 에이전트에게 제공하여 그 격차를 메웁니다.
-
두 개의 MCP 서버는 보완적인 요구를 다룹니다. XcodeBuildMCP는 Xcode를 열지 않고도 작동합니다 (헤드리스 빌드, 시뮬레이터, 디버깅). Apple의 Xcode MCP는 실행 중인 Xcode 프로세스에 연결됩니다 (진단, 문서, SwiftUI 미리보기). iOS 개발 워크플로우의 완전한 커버리지를 위해 둘 다 사용하세요.
다른 도구 체인을 위한 MCP를 평가하는 엔지니어를 위해:
-
이 패턴은 Xcode를 넘어 일반화됩니다. 비구조화된 텍스트 (컴파일러, 린터, 테스트 러너, 패키지 관리자)를 출력하는 모든 개발 도구는 구조화된 MCP 인터페이스로 래핑될 때 AI 에이전트에게 더 유용해집니다. 프로토콜은 통찰력보다 덜 중요합니다: 에이전트는 가변 형식 로그가 아닌 예측 가능한 필드로 정보가 도착할 때 더 잘 추론합니다.
-
에이전트 정의는 마지막 마일 격차를 메웁니다. MCP 서버를 설치하는 것은 필요하지만 충분하지 않습니다. 에이전트 정의의 명시적 지침 (“
xcodebuild보다build_sim선호”)은 구조화된 대안이 존재할 때 에이전트가 셸 명령어로 폴백하는 것을 방지합니다.
전체 Apple 생태계 클러스터: 표면 전반의 라우팅 질문에 대한 App Intents vs MCP; 인앱 서버 패턴에 대한 iOS 앱과 함께하는 MCP 서버; 인앱 vs 도구 LLM 분할에 대한 Foundation Models 에이전틱 워크플로우; 더 광범위한 iOS 앱 표면 모델에 대한 세 표면. 허브는 Apple Ecosystem Series에 있습니다. iOS Agent Development 가이드는 시뮬레이터 관리와 테스트 주도 패턴을 포함하여 전체 MCP 기반 워크플로우를 더 자세히 다룹니다.
FAQ
Claude Code와 함께 MCP를 사용하려면 여전히 Xcode가 설치되어 있어야 하나요?
네. 두 MCP 서버 모두 Xcode의 도구 체인 (xcodebuild, xcrun, simctl)을 둘러싼 래퍼입니다. Xcode가 설치되고 구성되어 있어야 합니다. MCP 서버는 Claude Code에 이러한 도구에 대한 구조화된 액세스를 제공하지만, 그것들을 대체하지는 않습니다.
XcodeBuildMCP는 SwiftPM 전용 프로젝트와 작동하나요?
네. XcodeBuildMCP는 .xcodeproj/.xcworkspace와 Swift Package Manager 프로젝트를 모두 지원합니다. discover_projs를 사용하여 사용 가능한 프로젝트 유형을 찾은 다음, 적절한 스킴으로 build_sim 또는 build_device를 사용하세요.
CI/CD 파이프라인은 어떻게 되나요?
MCP 서버는 Claude Code와 함께 로컬에서 실행됩니다. CI/CD의 경우, xcodebuild를 직접 사용하거나 Fastlane과 같은 도구를 계속 사용할 것입니다. MCP 접근 방식은 특히 AI 에이전트가 코드-빌드-테스트 사이클 동안 구조화된 피드백이 필요한 대화형 개발 루프를 위한 것입니다.
MCP는 무엇이며 왜 AI 개발 도구에 중요한가요?
Model Context Protocol (MCP)는 AI 에이전트가 구조화된 JSON 요청과 응답을 통해 외부 도구와 통신하는 방법을 정의하는 개방형 표준입니다. MCP 이전에는 에이전트가 셸 명령어를 실행하고 비구조화된 텍스트 출력을 파싱하여 개발자 도구와 상호 작용했으며, 이는 출력 형식이 변경될 때 깨지고 잡음에 컨텍스트 윈도우 토큰을 낭비하는 취약한 접근 방식이었습니다. MCP는 인터페이스를 표준화합니다: 에이전트가 구조화된 요청 (매개변수가 있는 build_sim)을 보내고, 도구가 구조화된 응답 (분류된 오류, 파일 경로, 줄 번호가 있는 JSON)을 반환합니다. 에이전트의 작업은 파싱에서 추론으로 이동합니다. MCP는 AI 에이전트 도구화에 대해 REST가 웹 API에 했던 것과 같습니다: 모든 도구가 구조화된 기능을 모든 에이전트에게 노출할 수 있게 해주는 공유 프로토콜입니다.
-
XcodeBuildMCP는 2025년에 원래 유지 관리자 (Cameron Cooke)에서 Sentry로 이전되었으며 현재 github.com/getsentry/XcodeBuildMCP에서 유지 관리됩니다. Sentry 기반 런타임 텔레메트리는 기본적으로 활성화되어 있습니다; 환경 변수
XCODEBUILDMCP_SENTRY_DISABLED=true는 완전히 옵트아웃합니다. 개인 정보 보호 자세는 xcodebuildmcp.com/docs/privacy에 문서화되어 있습니다. ↩ -
Claude Code는 총 도구 수가 많을 때 MCP 도구를 지연 로드하기 위해 Tool Search를 사용합니다. XcodeBuildMCP만으로 82개 도구 (v2.3.2)가 있을 때, 명시적인 에이전트 지침은 에이전트가 셸 명령어로 폴백하는 대신 첫 번째 시도에서 올바른 도구를 발견하도록 돕습니다. ↩
-
이는 저의 Claude Code hooks 기사의 패턴을 반영합니다: 확률론적 AI 위에 있는 결정론적 인프라. MCP 서버는 구조화되고 신뢰할 수 있는 인터페이스를 제공합니다. AI는 언제 어떻게 사용할지에 대한 판단을 제공합니다. 둘 중 하나만으로는 충분하지 않습니다. ↩
-
XcodeBuildMCP는 시맨틱 버전 관리를 따릅니다. 도구 목록과 매개변수 형식은 프로젝트의 README와 CHANGELOG에 문서화되어 있습니다. 버전 기록은 github.com/getsentry/XcodeBuildMCP/releases를 참조하세요. v2.3.2 카탈로그는 시뮬레이터, 기기, 디버깅, 프로젝트 인트로스펙션, UI 자동화 워크플로우에 걸쳐 82개 도구를 광고합니다. 프로젝트는 오픈 소스이며 Sentry에서 유지 관리합니다. ↩
-
Anthropic, “Model Context Protocol Specification,” modelcontextprotocol.io/specification. MCP 명세는 XcodeBuildMCP와 Apple의 Xcode MCP가 모두 구현하는 JSON-RPC 전송, 도구 검색, 리소스 프로토콜을 정의합니다. 명세는 개방되어 있으며 커뮤니티 기여와 함께 Anthropic에서 유지 관리합니다. ↩
-
Rudrank Riyam, “Exploring Xcode Using MCP Tools,” rudrank.com/exploring-xcode-using-mcp-tools-cursor-external-clients, 2026. Riyam의 안내는 이 게시물에서 설명한 20개 도구 수, 실행 중인 Xcode 인스턴스에 대한 XPC 종속성, 문서 검색 기능을 독립적으로 확인합니다. 그의 분석은 또한 Cursor와 다른 외부 클라이언트와 함께 Apple의 MCP 서버를 사용하는 것을 다룹니다. ↩
-
modelcontextprotocol.io/examples의 MCP 생태계 카탈로그는 Docker, PostgreSQL, GitHub, Kubernetes, Slack, 그리고 수십 개의 다른 도구를 위한 커뮤니티 유지 관리 서버를 나열합니다. 각각은 동일한 패턴을 따릅니다: 기존 CLI 또는 API를 구조화된 JSON 도구 인터페이스로 래핑하기. 생태계의 폭은 MCP가 Xcode 특정이 아니라 AI 에이전트와 도구 간 통신을 위한 범용 프로토콜임을 검증합니다. ↩
-
Apple, “Meet agentic coding in Xcode,” Apple Developer Tech Talks, 2026. Apple은 OpenAI Codex와 Claude Agent와의 MCP를 통한 Xcode 26.3의 에이전틱 코딩 통합을 소개하면서 MCP 브리지를 통한 Swift REPL 실행, 문서 검색, 빌드 진단을 시연했습니다. developer.apple.com/videos/play/tech-talks/111428에서 시청 가능합니다. ↩
-
Jimenez, C.E., Yang, J., Wettig, A., et al., “SWE-bench: Can Language Models Resolve Real-World GitHub Issues?” ICLR 2024. arxiv.org/abs/2310.06770. SWE-bench는 언어 모델이 실제 GitHub 이슈를 해결하는 능력을 평가합니다. 구조화된 도구 액세스 (대상 파일 편집, 구조화된 테스트 출력)를 가진 에이전트는 비구조화된 셸 명령어로 제한된 에이전트보다 훨씬 더 우수한 성과를 보였습니다. 이 발견은 이 게시물의 핵심 주장을 검증합니다: 구조화된 인터페이스는 에이전트를 더 똑똑하게 만들어서가 아니라 에이전트가 받는 정보를 읽을 수 있게 만들어 에이전트의 효과를 향상시킵니다. ↩