iOS Simulator MCP
iOS Simulator MCP 서버
iOS 시뮬레이터와 상호작용하기 위한 MCP(Model Context Protocol) 서버입니다. 이 서버를 사용하면 시뮬레이터에 대한 정보를 얻고, UI 상호작용을 제어하며, UI 요소를 검사하여 iOS 시뮬레이터와 상호작용할 수 있습니다.
보안 공지: 1.3.3 미만 버전에서 발견된 명령 주입(Command injection) 취약점이 수정되었습니다. v1.3.3 이상으로 업데이트하십시오. 자세한 내용은 SECURITY.md를 참조하십시오.
https://github.com/user-attachments/assets/453ebe7b-cc93-4ac2-b08d-0f8ac8339ad3
🌟 주요 소개
이 프로젝트는 다양한 간행물 및 리소스에서 소개 및 언급되었습니다:
Claude Code 모범 사례 기사 - 모범 사례를 소개하는 Anthropic 엔지니어링 블로그
React Native 뉴스레터 187호 - 가장 인기 있는 React Native 커뮤니티 뉴스레터에 소개됨
모바일 자동화 뉴스레터 - #56 - 모바일 테스트 및 자동화 리소스에 관한 장기 운영 뉴스레터에 소개됨
punkeye/awesome-mcp-server 목록 - 가장 인기 있는 엄선된 MCP 서버 모음집에 등재됨
Related MCP server: iOS Device Control MCP Server
도구
get_booted_sim_id
설명: 현재 부팅된 iOS 시뮬레이터의 ID를 가져옵니다.
매개변수: 매개변수 없음
open_simulator
설명: iOS 시뮬레이터 애플리케이션을 엽니다.
매개변수: 매개변수 없음
ui_describe_all
설명: iOS 시뮬레이터의 전체 화면에 대한 접근성 정보를 설명합니다.
매개변수:
{
/**
* Udid of target, can also be set with the IDB_UDID env var
* Format: UUID (8-4-4-4-12 hexadecimal characters)
*/
udid?: string;
}ui_tap
설명: iOS 시뮬레이터 화면을 탭합니다.
매개변수:
{
/**
* Press duration in seconds (decimal numbers allowed)
*/
duration?: string;
/**
* Udid of target, can also be set with the IDB_UDID env var
* Format: UUID (8-4-4-4-12 hexadecimal characters)
*/
udid?: string;
/** The x-coordinate */
x: number;
/** The y-coordinate */
y: number;
}ui_type
설명: iOS 시뮬레이터에 텍스트를 입력합니다.
매개변수:
{
/**
* Udid of target, can also be set with the IDB_UDID env var
* Format: UUID (8-4-4-4-12 hexadecimal characters)
*/
udid?: string;
/**
* Text to input
* Format: ASCII printable characters only
*/
text: string;
}ui_swipe
설명: iOS 시뮬레이터 화면을 스와이프합니다.
매개변수:
{
/**
* Swipe duration in seconds (decimal numbers allowed)
*/
duration?: string;
/**
* Udid of target, can also be set with the IDB_UDID env var
* Format: UUID (8-4-4-4-12 hexadecimal characters)
*/
udid?: string;
/** The starting x-coordinate */
x_start: number;
/** The starting y-coordinate */
y_start: number;
/** The ending x-coordinate */
x_end: number;
/** The ending y-coordinate */
y_end: number;
/** The size of each step in the swipe (default is 1) */
delta?: number;
}ui_describe_point
설명: iOS 시뮬레이터 화면의 지정된 좌표에 있는 접근성 요소를 반환합니다.
매개변수:
{
/**
* Udid of target, can also be set with the IDB_UDID env var
* Format: UUID (8-4-4-4-12 hexadecimal characters)
*/
udid?: string;
/** The x-coordinate */
x: number;
/** The y-coordinate */
y: number;
}ui_find_element
설명: 접근성 트리를 검색하여 주어진 기준과 일치하는 요소를 반환합니다.
매개변수:
{
/** Array of search strings. An element matches if ANY string matches against its AXLabel or AXUniqueId */
search: string[];
/** Filter by element type (e.g. 'Button', 'StaticText', 'Group'). Case-insensitive exact match */
type?: string;
/** Match mode: 'substring' (default) or 'exact' */
matchMode?: "substring" | "exact";
/** Whether search matching is case-sensitive (default: false) */
caseSensitive?: boolean;
/**
* Udid of target, can also be set with the IDB_UDID env var
* Format: UUID (8-4-4-4-12 hexadecimal characters)
*/
udid?: string;
}ui_view
설명: 현재 시뮬레이터 뷰의 압축된 스크린샷 이미지 콘텐츠를 가져옵니다.
매개변수:
{
/**
* Udid of target, can also be set with the IDB_UDID env var
* Format: UUID (8-4-4-4-12 hexadecimal characters)
*/
udid?: string;
}screenshot
설명: iOS 시뮬레이터의 스크린샷을 찍습니다.
매개변수:
{
/**
* Udid of target, can also be set with the IDB_UDID env var
* Format: UUID (8-4-4-4-12 hexadecimal characters)
*/
udid?: string;
/** File path where the screenshot will be saved. If relative, it uses the directory specified by the `IOS_SIMULATOR_MCP_DEFAULT_OUTPUT_DIR` env var, or `~/Downloads` if not set. */
output_path: string;
/** Image format (png, tiff, bmp, gif, or jpeg). Default is png. */
type?: "png" | "tiff" | "bmp" | "gif" | "jpeg";
/** Display to capture (internal or external). Default depends on device type. */
display?: "internal" | "external";
/** For non-rectangular displays, handle the mask by policy (ignored, alpha, or black) */
mask?: "ignored" | "alpha" | "black";
}record_video
설명: simctl을 직접 사용하여 iOS 시뮬레이터의 비디오를 녹화합니다.
매개변수:
{
/**
* Udid of target, can also be set with the IDB_UDID env var
* Format: UUID (8-4-4-4-12 hexadecimal characters)
*/
udid?: string;
/** Optional output path. If not provided, a default name will be used. The file will be saved in the directory specified by `IOS_SIMULATOR_MCP_DEFAULT_OUTPUT_DIR` or in `~/Downloads` if the environment variable is not set. */
output_path?: string;
/** Specifies the codec type: "h264" or "hevc". Default is "hevc". */
codec?: "h264" | "hevc";
/** Display to capture: "internal" or "external". Default depends on device type. */
display?: "internal" | "external";
/** For non-rectangular displays, handle the mask by policy: "ignored", "alpha", or "black". */
mask?: "ignored" | "alpha" | "black";
/** Force the output file to be written to, even if the file already exists. */
force?: boolean;
}stop_recording
설명: killall을 사용하여 시뮬레이터 비디오 녹화를 중지합니다.
매개변수: 매개변수 없음
install_app
설명: iOS 시뮬레이터에 앱 번들(.app 또는 .ipa)을 설치합니다.
매개변수:
{
/**
* Udid of target, can also be set with the IDB_UDID env var
* Format: UUID (8-4-4-4-12 hexadecimal characters)
*/
udid?: string;
/** Path to the app bundle (.app directory or .ipa file) to install */
app_path: string;
}launch_app
설명: 번들 식별자를 사용하여 iOS 시뮬레이터에서 앱을 실행합니다.
매개변수:
{
/**
* Udid of target, can also be set with the IDB_UDID env var
* Format: UUID (8-4-4-4-12 hexadecimal characters)
*/
udid?: string;
/** Bundle identifier of the app to launch (e.g., com.apple.mobilesafari) */
bundle_id: string;
/** Terminate the app if it is already running before launching */
terminate_running?: boolean;
/** Optional environment variables passed via SIMCTL_CHILD_ to simctl launch */
env?: Record<string, string>;
}참고: simctl launch가 모든 Xcode 버전에서 --env/--envs를 지원하지 않기 때문에 환경 변수는 SIMCTL_CHILD_를 사용하여 전달됩니다.
예시:
{
"bundle_id": "com.example.app",
"terminate_running": true,
"env": {
"FOO": "bar",
"BAZ": "qux"
}
}💡 사용 사례: MCP 도구 호출을 통한 QA 단계
이 MCP 서버를 사용하면 MCP(Model Context Protocol) 클라이언트와 통합된 AI 어시스턴트가 도구 호출을 통해 품질 보증(QA) 작업을 수행할 수 있습니다. 이는 UI 일관성과 올바른 동작을 보장하기 위해 기능을 구현한 직후에 유용합니다.
사용 방법
기능 구현 후, MCP 클라이언트 환경 내의 AI 어시스턴트에게 사용 가능한 도구를 사용하도록 지시하십시오. 예를 들어, Cursor의 에이전트 모드에서 아래 프롬프트를 사용하여 UI 상호작용을 빠르게 검증하고 문서화할 수 있습니다.
예시 프롬프트
UI 요소 확인:
Verify all accessibility elements on the current screen텍스트 입력 확인:
Enter "QA Test" into the text input field and confirm the input is correct탭 응답 확인:
Tap on coordinates x=250, y=400 and verify the expected element is triggered스와이프 동작 검증:
Swipe from x=150, y=600 to x=150, y=100 and confirm correct behavior상세 요소 확인:
Describe the UI element at position x=300, y=350 to ensure proper labeling and functionalityAI 에이전트에게 시뮬레이터 화면 보여주기:
View the current simulator screen스크린샷 찍기:
Take a screenshot of the current simulator screen and save it to my_screenshot.png비디오 녹화:
Start recording a video of the simulator screen (saves to the default output directory, which is `~/Downloads` unless overridden by `IOS_SIMULATOR_MCP_DEFAULT_OUTPUT_DIR`)녹화 중지:
Stop the current simulator screen recording앱 설치:
Install the app at path/to/MyApp.app on the simulator앱 실행:
Launch the Safari app (com.apple.mobilesafari) on the simulator
사전 요구 사항
Node.js
macOS (iOS 시뮬레이터는 macOS에서만 사용 가능)
Xcode 및 iOS 시뮬레이터 설치됨
Facebook IDB 도구 (설치 가이드 참조)
설치
이 섹션에서는 iOS 시뮬레이터 MCP 서버를 다양한 MCP 클라이언트와 통합하는 방법을 설명합니다.
Cursor와 함께 설치
Cursor는 ~/.cursor/mcp.json에 위치한 구성 파일을 통해 MCP 서버를 관리합니다.
옵션 1: NPX 사용 (권장)
Cursor MCP 구성 파일을 편집합니다. Cursor에서 직접 열거나 다음 명령을 사용할 수 있습니다:
# Open with your default editor (or use 'code', 'vim', etc.) open ~/.cursor/mcp.json # Or use Cursor's command if available # cursor ~/.cursor/mcp.jsoniOS 시뮬레이터 서버 구성을 사용하여
mcpServers섹션을 추가하거나 업데이트합니다:{ "mcpServers": { // ... other servers might be listed here ... "ios-simulator": { "command": "npx", "args": ["-y", "ios-simulator-mcp"] } } }mcpServers가 이미 존재하는 경우 JSON 구조가 유효한지 확인하십시오.변경 사항을 적용하려면 Cursor를 다시 시작하십시오.
옵션 2: 로컬 개발
이 저장소를 복제합니다:
git clone https://github.com/joshuayoes/ios-simulator-mcp cd ios-simulator-mcp종속성을 설치합니다:
npm install프로젝트를 빌드합니다:
npm run buildCursor MCP 구성 파일을 편집합니다(옵션 1 참조).
로컬 빌드를 가리키는
mcpServers섹션을 추가하거나 업데이트합니다:{ "mcpServers": { // ... other servers might be listed here ... "ios-simulator": { "command": "node", "args": ["/full/path/to/your/ios-simulator-mcp/build/index.js"] } } }중요:
/full/path/to/your/를ios-simulator-mcp저장소를 복제한 절대 경로로 바꾸십시오.변경 사항을 적용하려면 Cursor를 다시 시작하십시오.
Claude Code와 함께 설치
Claude Code CLI는 claude mcp 명령을 사용하거나 구성 파일을 직접 편집하여 MCP 서버를 관리할 수 있습니다. Claude Code MCP 구성에 대한 자세한 내용은 공식 문서를 참조하십시오.
옵션 1: NPX 사용 (권장)
claude mcp add명령을 사용하여 서버를 추가합니다:claude mcp add ios-simulator npx ios-simulator-mcp필요한 경우 실행 중인 Claude Code 세션을 다시 시작하십시오.
옵션 2: 로컬 개발
이 저장소를 복제하고 종속성을 설치한 후 Cursor "로컬 개발" 단계 1-3에 설명된 대로 프로젝트를 빌드합니다.
로컬 빌드를 가리키는
claude mcp add명령을 사용하여 서버를 추가합니다:claude mcp add ios-simulator -- node "/full/path/to/your/ios-simulator-mcp/build/index.js"중요:
/full/path/to/your/를ios-simulator-mcp저장소를 복제한 절대 경로로 바꾸십시오.필요한 경우 실행 중인 Claude Code 세션을 다시 시작하십시오.
구성
환경 변수
변수 | 설명 | 예시 |
| 등록에서 제외할 도구 이름의 쉼표로 구분된 목록입니다. |
|
| 스크린샷 및 비디오 녹화와 같은 출력 파일의 기본 디렉토리를 지정합니다. 설정하지 않으면 |
|
| IDB 실행 파일에 대한 사용자 지정 경로를 지정합니다. 설정하지 않으면 |
|
구성 예시
{
"mcpServers": {
"ios-simulator": {
"command": "npx",
"args": ["-y", "ios-simulator-mcp"],
"env": {
"IOS_SIMULATOR_MCP_FILTERED_TOOLS": "screenshot,record_video,stop_recording",
"IOS_SIMULATOR_MCP_DEFAULT_OUTPUT_DIR": "~/Code/awesome-project/tmp",
"IOS_SIMULATOR_MCP_IDB_PATH": "~/bin/idb"
}
}
}
}MCP 레지스트리 서버 목록
라이선스
MIT
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to automate iOS Simulator interactions including device management, UI element interaction (tap, swipe, type), screenshot capture, and execution of YAML-defined navigation workflows.2MIT
- AlicenseNot gradedqualityDmaintenanceEnables comprehensive control of iOS simulators and real devices through AI assistants, supporting app management, UI automation, screenshots, media operations, and location simulation for iOS development and testing workflows.5MIT
- FlicenseNot gradedqualityDmaintenanceEnables AI to control iOS simulators through the MCP protocol. Supports device management, UI automation, and network interception including screenshot capture, text input, and HTTP request mocking.
- AlicenseAqualityFmaintenanceProvides structured access to iOS Simulator management via xcrun simctl commands, enabling device, app, media, and testing operations through natural language.151MIT
Related MCP Connectors
Provides cloud browser automation capabilities using Stagehand and Browserbase, enabling LLMs to i…
Let ChatGPT, Claude & Cursor use your Mac: email, calendar, iMessage, Teams, files. Local, free.
MCP connector that lets ChatGPT list, search, and run your Apple Shortcuts via a local Mac agent
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/joshuayoes/ios-simulator-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server