mcp-baepsae 3.1.9 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README-KR.md +91 -56
- package/README.md +84 -59
- package/dist/index.js +39 -808
- package/dist/index.js.map +1 -1
- package/dist/tools/info.d.ts +3 -0
- package/dist/tools/info.d.ts.map +1 -0
- package/dist/tools/info.js +75 -0
- package/dist/tools/info.js.map +1 -0
- package/dist/tools/input.d.ts +3 -0
- package/dist/tools/input.d.ts.map +1 -0
- package/dist/tools/input.js +147 -0
- package/dist/tools/input.js.map +1 -0
- package/dist/tools/media.d.ts +3 -0
- package/dist/tools/media.d.ts.map +1 -0
- package/dist/tools/media.js +54 -0
- package/dist/tools/media.js.map +1 -0
- package/dist/tools/simulator.d.ts +3 -0
- package/dist/tools/simulator.d.ts.map +1 -0
- package/dist/tools/simulator.js +52 -0
- package/dist/tools/simulator.js.map +1 -0
- package/dist/tools/system.d.ts +3 -0
- package/dist/tools/system.d.ts.map +1 -0
- package/dist/tools/system.js +117 -0
- package/dist/tools/system.js.map +1 -0
- package/dist/tools/ui.d.ts +3 -0
- package/dist/tools/ui.d.ts.map +1 -0
- package/dist/tools/ui.js +284 -0
- package/dist/tools/ui.js.map +1 -0
- package/dist/types.d.ts +29 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/utils.d.ts +29 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +308 -0
- package/dist/utils.js.map +1 -0
- package/native/Package.swift +5 -0
- package/native/Sources/Commands/InputCommands.swift +166 -0
- package/native/Sources/Commands/MediaCommands.swift +59 -0
- package/native/Sources/Commands/SystemCommands.swift +160 -0
- package/native/Sources/Commands/UICommands.swift +286 -0
- package/native/Sources/Commands/WindowCommands.swift +86 -0
- package/native/Sources/Types.swift +51 -0
- package/native/Sources/Utils.swift +1054 -0
- package/native/Sources/main.swift +27 -1699
- package/package.json +1 -1
- package/scripts/install.sh +2 -2
package/README-KR.md
CHANGED
|
@@ -13,7 +13,9 @@ TypeScript MCP 레이어와 Swift 네이티브 브리지를 사용하는 iOS 시
|
|
|
13
13
|
## 목차
|
|
14
14
|
|
|
15
15
|
- [사전 요구 사항](#사전-요구-사항)
|
|
16
|
+
- [플랫폼 지원](#플랫폼-지원)
|
|
16
17
|
- [설치](#설치)
|
|
18
|
+
- [권한](#권한)
|
|
17
19
|
- [MCP 설정 (권장)](#mcp-설정-권장)
|
|
18
20
|
- [클라이언트 매트릭스](#클라이언트-매트릭스)
|
|
19
21
|
- [For LLM](#for-llm)
|
|
@@ -21,6 +23,7 @@ TypeScript MCP 레이어와 Swift 네이티브 브리지를 사용하는 iOS 시
|
|
|
21
23
|
- [프로젝트 구조](#프로젝트-구조)
|
|
22
24
|
- [명령어](#명령어)
|
|
23
25
|
- [MCP 도구 구현 상태](#mcp-도구-구현-상태)
|
|
26
|
+
- [사용 예시](#사용-예시)
|
|
24
27
|
- [트러블슈팅](#트러블슈팅)
|
|
25
28
|
|
|
26
29
|
## 사전 요구 사항
|
|
@@ -30,13 +33,41 @@ TypeScript MCP 레이어와 Swift 네이티브 브리지를 사용하는 iOS 시
|
|
|
30
33
|
- Node.js 18+
|
|
31
34
|
- Swift 6+
|
|
32
35
|
|
|
36
|
+
## 플랫폼 지원
|
|
37
|
+
|
|
38
|
+
| 플랫폼 | 지원 여부 | 비고 |
|
|
39
|
+
|---|---|---|
|
|
40
|
+
| macOS | 지원 | 기본 플랫폼. iOS 시뮬레이터 및 접근성 API에 필수. |
|
|
41
|
+
| Linux | 미지원 | 네이티브 바이너리가 AppKit, CoreGraphics, Accessibility 프레임워크에 의존. |
|
|
42
|
+
| Windows | 미지원 | 네이티브 바이너리가 AppKit, CoreGraphics, Accessibility 프레임워크에 의존. |
|
|
43
|
+
|
|
44
|
+
**macOS 전용인 이유**
|
|
45
|
+
|
|
46
|
+
Swift 네이티브 브리지(`baepsae-native`)는 iOS 시뮬레이터 및 macOS 애플리케이션과 상호작용하기 위해 macOS 전용 프레임워크(AppKit, CoreGraphics, Accessibility)를 사용합니다. 이 프레임워크들은 Linux나 Windows에서 사용할 수 없습니다. TypeScript MCP 레이어 또한 Xcode Command Line Tools에 포함된 `xcrun simctl`에 의존하며, 이는 macOS에서만 사용 가능합니다.
|
|
47
|
+
|
|
48
|
+
**요구 사항 요약:**
|
|
49
|
+
|
|
50
|
+
- **macOS 14 이상** -- iOS 시뮬레이터 자동화 및 접근성 API 접근에 필요합니다.
|
|
51
|
+
- **Xcode 또는 Xcode Command Line Tools** -- 네이티브 바이너리의 Swift 6+ 컴파일 및 `xcrun simctl` 명령어 실행에 필요합니다.
|
|
52
|
+
- **Node.js >= 18.0.0** -- TypeScript MCP 서버 실행에 필요합니다.
|
|
53
|
+
|
|
54
|
+
## 권한
|
|
55
|
+
|
|
56
|
+
**접근성(Accessibility) 권한이 필요합니다.** UI 조회/입력 자동화 도구(`sim_*` / `mac_*` 스코프 도구, 예: `sim_describe_ui`, `mac_tap`, `sim_right_click`)를 사용할 때 필수입니다.
|
|
57
|
+
|
|
58
|
+
1. **시스템 설정** > **개인정보 보호 및 보안** > **손쉬운 사용(Accessibility)** 로 이동합니다.
|
|
59
|
+
2. 사용 중인 터미널/실행기(Terminal, iTerm2, VSCode, `node`, `openclaw`)를 허용합니다.
|
|
60
|
+
3. 목록에 없으면 `+` 버튼으로 수동 추가합니다.
|
|
61
|
+
|
|
62
|
+
시뮬레이터 타깃에서 선택자 기반 액션(`sim_tap`/`sim_right_click`의 `id`/`label`)은 기본적으로 **앱 내부 콘텐츠**를 탐색합니다. Simulator 크롬/시스템 UI까지 포함하려면 `all: true`를 사용하세요.
|
|
63
|
+
|
|
33
64
|
## 설치
|
|
34
65
|
|
|
35
66
|
### 옵션 A) npm (가장 간편)
|
|
36
67
|
|
|
37
68
|
```bash
|
|
38
69
|
# 설치 없이 바로 실행
|
|
39
|
-
npx mcp-baepsae
|
|
70
|
+
npx mcp-baepsae@latest
|
|
40
71
|
|
|
41
72
|
# 또는 전역 설치
|
|
42
73
|
npm install -g mcp-baepsae
|
|
@@ -89,10 +120,10 @@ bash scripts/install.sh --tool all
|
|
|
89
120
|
|
|
90
121
|
```bash
|
|
91
122
|
# Claude Code
|
|
92
|
-
claude mcp add baepsae -- npx -y mcp-baepsae
|
|
123
|
+
claude mcp add baepsae -- npx -y mcp-baepsae@latest
|
|
93
124
|
|
|
94
125
|
# Codex CLI
|
|
95
|
-
codex mcp add baepsae -- npx -y mcp-baepsae
|
|
126
|
+
codex mcp add baepsae -- npx -y mcp-baepsae@latest
|
|
96
127
|
```
|
|
97
128
|
|
|
98
129
|
### 자동화 옵션
|
|
@@ -115,8 +146,8 @@ bash scripts/install.sh --tool all --uninstall
|
|
|
115
146
|
| 플래그 | 명령어 | 사용 시점 |
|
|
116
147
|
|---|---|---|
|
|
117
148
|
| `--runtime node` (기본값) | `node dist/index.js` | 소스 빌드 |
|
|
118
|
-
| `--runtime npx` | `npx -y mcp-baepsae` | npm 레지스트리, 전역 설치 불필요 |
|
|
119
|
-
| `--runtime bunx` | `bunx mcp-baepsae` | Bun 사용자 |
|
|
149
|
+
| `--runtime npx` | `npx -y mcp-baepsae@latest` | npm 레지스트리, 전역 설치 불필요 |
|
|
150
|
+
| `--runtime bunx` | `bunx mcp-baepsae@latest` | Bun 사용자 |
|
|
120
151
|
| `--runtime global` | `mcp-baepsae` | `npm install -g mcp-baepsae` 이후 |
|
|
121
152
|
|
|
122
153
|
## 수동 설정 (대안)
|
|
@@ -127,13 +158,13 @@ bash scripts/install.sh --tool all --uninstall
|
|
|
127
158
|
|
|
128
159
|
```bash
|
|
129
160
|
# Claude Code
|
|
130
|
-
claude mcp add baepsae -- npx -y mcp-baepsae
|
|
161
|
+
claude mcp add baepsae -- npx -y mcp-baepsae@latest
|
|
131
162
|
|
|
132
163
|
# Codex CLI
|
|
133
|
-
codex mcp add baepsae -- npx -y mcp-baepsae
|
|
164
|
+
codex mcp add baepsae -- npx -y mcp-baepsae@latest
|
|
134
165
|
|
|
135
166
|
# Gemini CLI
|
|
136
|
-
gemini mcp add --scope user --transport stdio baepsae npx -y mcp-baepsae
|
|
167
|
+
gemini mcp add --scope user --transport stdio baepsae npx -y mcp-baepsae@latest
|
|
137
168
|
```
|
|
138
169
|
|
|
139
170
|
### 로컬 빌드 사용
|
|
@@ -151,10 +182,14 @@ gemini mcp add --scope user --transport stdio -e BAEPSAE_NATIVE_PATH=/ABS/PATH/n
|
|
|
151
182
|
|
|
152
183
|
## 프로젝트 구조
|
|
153
184
|
|
|
154
|
-
- MCP
|
|
155
|
-
-
|
|
185
|
+
- MCP 서버 진입점: `src/index.ts`
|
|
186
|
+
- 도구 모듈: `src/tools/` (info, simulator, ui, input, media, system)
|
|
187
|
+
- 공유 유틸리티: `src/utils.ts`, `src/types.ts`
|
|
188
|
+
- 네이티브 바이너리 진입점: `native/Sources/main.swift`
|
|
189
|
+
- 네이티브 커맨드 핸들러: `native/Sources/Commands/`
|
|
156
190
|
- 네이티브 바이너리 출력: `native/.build/release/baepsae-native`
|
|
157
|
-
- 테스트: `tests/mcp.contract.test.mjs`, `tests/mcp.real.test.mjs`
|
|
191
|
+
- TS 테스트: `tests/mcp.contract.test.mjs`, `tests/unit.test.mjs`, `tests/mcp.real.test.mjs`
|
|
192
|
+
- Swift 테스트: `native/Tests/BaepsaeNativeTests/`
|
|
158
193
|
|
|
159
194
|
## 명령어
|
|
160
195
|
|
|
@@ -168,59 +203,59 @@ npm run setup:mcp # scripts/install.sh 실행 alias
|
|
|
168
203
|
|
|
169
204
|
## MCP 도구 구현 상태
|
|
170
205
|
|
|
171
|
-
총
|
|
206
|
+
총 47개 도구가 end-to-end 구현 완료되었습니다.
|
|
172
207
|
|
|
173
|
-
###
|
|
208
|
+
### 타깃 분리 스코프 도구 (30개, 권장)
|
|
174
209
|
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
|
178
|
-
| `screenshot` | 시뮬레이터 스크린샷 캡처 |
|
|
179
|
-
| `record_video` | 시뮬레이터 화면 녹화 |
|
|
180
|
-
| `stream_video` | 비디오 프레임 스트리밍 |
|
|
181
|
-
| `open_url` | 시뮬레이터에서 URL 열기 (Safari/딥링크) |
|
|
182
|
-
| `install_app` | .app/.ipa 설치 |
|
|
183
|
-
| `launch_app` | Bundle ID로 앱 실행 |
|
|
184
|
-
| `terminate_app` | 실행 중인 앱 종료 |
|
|
185
|
-
| `uninstall_app` | 앱 제거 |
|
|
186
|
-
| `button` | 하드웨어 버튼 (home/lock/side/siri/apple-pay) |
|
|
187
|
-
| `gesture` | 프리셋 제스처 (scroll/swipe-edge) |
|
|
188
|
-
|
|
189
|
-
### macOS 전용 (4개)
|
|
190
|
-
|
|
191
|
-
| 도구 | 설명 |
|
|
210
|
+
시뮬레이터/맥 타깃 혼동을 줄이려면 아래 `sim_*` / `mac_*` 도구를 우선 사용하세요.
|
|
211
|
+
|
|
212
|
+
| 시뮬레이터 스코프 | macOS 스코프 |
|
|
192
213
|
|---|---|
|
|
193
|
-
| `
|
|
194
|
-
| `
|
|
195
|
-
| `
|
|
196
|
-
| `
|
|
214
|
+
| `sim_describe_ui` | `mac_describe_ui` |
|
|
215
|
+
| `sim_search_ui` | `mac_search_ui` |
|
|
216
|
+
| `sim_tap` | `mac_tap` |
|
|
217
|
+
| `sim_type_text` | `mac_type_text` |
|
|
218
|
+
| `sim_swipe` | `mac_swipe` |
|
|
219
|
+
| `sim_key` | `mac_key` |
|
|
220
|
+
| `sim_key_sequence` | `mac_key_sequence` |
|
|
221
|
+
| `sim_key_combo` | `mac_key_combo` |
|
|
222
|
+
| `sim_touch` | `mac_touch` |
|
|
223
|
+
| `sim_right_click` | `mac_right_click` |
|
|
224
|
+
| `sim_scroll` | `mac_scroll` |
|
|
225
|
+
| `sim_drag_drop` | `mac_drag_drop` |
|
|
226
|
+
| `sim_list_windows` | `mac_list_windows` |
|
|
227
|
+
| `sim_activate_app` | `mac_activate_app` |
|
|
228
|
+
| `sim_screenshot_app` | `mac_screenshot_app` |
|
|
197
229
|
|
|
198
|
-
###
|
|
230
|
+
### iOS 시뮬레이터 전용 (11개)
|
|
199
231
|
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
| `type_text` | 텍스트 입력 |
|
|
206
|
-
| `swipe` | 스와이프 제스처 |
|
|
207
|
-
| `key` | HID 키코드 입력 |
|
|
208
|
-
| `key_sequence` | 연속 키코드 입력 |
|
|
209
|
-
| `key_combo` | 수정키 + 키 조합 |
|
|
210
|
-
| `touch` | 터치 다운/업 이벤트 |
|
|
211
|
-
| `right_click` | 우클릭 (ID/라벨 또는 좌표) |
|
|
212
|
-
| `drag_drop` | 드래그 앤 드롭 |
|
|
213
|
-
| `clipboard` | 클립보드 읽기/쓰기 |
|
|
214
|
-
| `list_windows` | 앱 윈도우 목록 |
|
|
215
|
-
| `activate_app` | 앱을 포그라운드로 전환 |
|
|
216
|
-
| `screenshot_app` | 앱 윈도우 스크린샷 |
|
|
232
|
+
`list_simulators`, `screenshot`, `record_video`, `stream_video`, `open_url`, `install_app`, `launch_app`, `terminate_app`, `uninstall_app`, `button`, `gesture`
|
|
233
|
+
|
|
234
|
+
### macOS / 시스템 전용 (4개)
|
|
235
|
+
|
|
236
|
+
`list_apps`, `menu_action`, `get_focused_app`, `clipboard`
|
|
217
237
|
|
|
218
238
|
### 유틸리티 (2개)
|
|
219
239
|
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
240
|
+
`baepsae_help`, `baepsae_version`
|
|
241
|
+
|
|
242
|
+
## 사용 예시
|
|
243
|
+
|
|
244
|
+
**시뮬레이터 내부 앱 접근성 퀵스타트:**
|
|
245
|
+
```javascript
|
|
246
|
+
// 1) 대상 시뮬레이터에서 앱 실행
|
|
247
|
+
launch_app({ udid: "...", bundleId: "com.example.app" })
|
|
248
|
+
|
|
249
|
+
// 2) 접근성 트리 조회/검색 (기본: 앱 내부 콘텐츠 스코프)
|
|
250
|
+
sim_describe_ui({ udid: "..." })
|
|
251
|
+
sim_search_ui({ udid: "...", query: "로그인" })
|
|
252
|
+
|
|
253
|
+
// 3) 접근성 ID/라벨로 상호작용
|
|
254
|
+
sim_tap({ udid: "...", id: "login-button" })
|
|
255
|
+
|
|
256
|
+
// 선택: Simulator 크롬/시스템 UI까지 탐색하려면
|
|
257
|
+
sim_tap({ udid: "...", label: "Home", all: true })
|
|
258
|
+
```
|
|
224
259
|
|
|
225
260
|
## 트러블슈팅
|
|
226
261
|
|
package/README.md
CHANGED
|
@@ -13,7 +13,9 @@ Local MCP server for iOS Simulator and macOS app automation with a TypeScript MC
|
|
|
13
13
|
## Table of Contents
|
|
14
14
|
|
|
15
15
|
- [Prerequisites](#prerequisites)
|
|
16
|
+
- [Platform Support](#platform-support)
|
|
16
17
|
- [Install](#install)
|
|
18
|
+
- [Permissions](#permissions)
|
|
17
19
|
- [MCP Setup (Recommended)](#mcp-setup-recommended)
|
|
18
20
|
- [Client Matrix](#client-matrix)
|
|
19
21
|
- [For LLM](#for-llm)
|
|
@@ -21,6 +23,7 @@ Local MCP server for iOS Simulator and macOS app automation with a TypeScript MC
|
|
|
21
23
|
- [Project Structure](#project-structure)
|
|
22
24
|
- [Commands](#commands)
|
|
23
25
|
- [MCP Tool Status](#mcp-tool-status)
|
|
26
|
+
- [Usage Examples](#usage-examples)
|
|
24
27
|
- [Troubleshooting](#troubleshooting)
|
|
25
28
|
|
|
26
29
|
## Prerequisites
|
|
@@ -30,21 +33,41 @@ Local MCP server for iOS Simulator and macOS app automation with a TypeScript MC
|
|
|
30
33
|
- Node.js 18+
|
|
31
34
|
- Swift 6+
|
|
32
35
|
|
|
36
|
+
## Platform Support
|
|
37
|
+
|
|
38
|
+
| Platform | Supported | Notes |
|
|
39
|
+
|---|---|---|
|
|
40
|
+
| macOS | Yes | Primary platform. Required for iOS Simulator and Accessibility APIs. |
|
|
41
|
+
| Linux | No | Native binary depends on AppKit, CoreGraphics, and Accessibility frameworks. |
|
|
42
|
+
| Windows | No | Native binary depends on AppKit, CoreGraphics, and Accessibility frameworks. |
|
|
43
|
+
|
|
44
|
+
**Why macOS only?**
|
|
45
|
+
|
|
46
|
+
The Swift native bridge (`baepsae-native`) uses macOS-specific frameworks (AppKit, CoreGraphics, Accessibility) to interact with iOS Simulator and macOS applications. These frameworks are not available on Linux or Windows. The TypeScript MCP layer also relies on `xcrun simctl`, which is part of Xcode Command Line Tools and only available on macOS.
|
|
47
|
+
|
|
48
|
+
**Requirements summary:**
|
|
49
|
+
|
|
50
|
+
- **macOS 14 or later** -- required for iOS Simulator automation and Accessibility API access.
|
|
51
|
+
- **Xcode or Xcode Command Line Tools** -- required for Swift 6+ compilation of the native binary and `xcrun simctl` commands.
|
|
52
|
+
- **Node.js >= 18.0.0** -- required to run the TypeScript MCP server.
|
|
53
|
+
|
|
33
54
|
## Permissions
|
|
34
55
|
|
|
35
|
-
**Accessibility permission is required** for UI automation features (`
|
|
56
|
+
**Accessibility permission is required** for UI inspection and input automation features (use `sim_*` / `mac_*` scoped tools such as `sim_describe_ui`, `mac_tap`, `sim_right_click`).
|
|
36
57
|
|
|
37
58
|
1. Open **System Settings** > **Privacy & Security** > **Accessibility**.
|
|
38
|
-
2. Enable
|
|
59
|
+
2. Enable the MCP client app and terminal you actually use, and also the runtime process (`node`) if listed.
|
|
39
60
|
3. If the app is missing, click `+` and add it manually.
|
|
40
61
|
|
|
62
|
+
For simulator targets, selector-based actions (`sim_tap` / `sim_right_click` with `id` or `label`) search **in-app content** by default. Set `all: true` to include Simulator chrome UI.
|
|
63
|
+
|
|
41
64
|
## Install
|
|
42
65
|
|
|
43
66
|
### Option A) npm (easiest)
|
|
44
67
|
|
|
45
68
|
```bash
|
|
46
69
|
# Run directly without installing
|
|
47
|
-
npx mcp-baepsae
|
|
70
|
+
npx mcp-baepsae@latest
|
|
48
71
|
|
|
49
72
|
# Or install globally
|
|
50
73
|
npm install -g mcp-baepsae
|
|
@@ -97,10 +120,10 @@ If you installed via npm instead of cloning the repo, use npx:
|
|
|
97
120
|
|
|
98
121
|
```bash
|
|
99
122
|
# Claude Code
|
|
100
|
-
claude mcp add baepsae -- npx -y mcp-baepsae
|
|
123
|
+
claude mcp add baepsae -- npx -y mcp-baepsae@latest
|
|
101
124
|
|
|
102
125
|
# Codex CLI
|
|
103
|
-
codex mcp add baepsae -- npx -y mcp-baepsae
|
|
126
|
+
codex mcp add baepsae -- npx -y mcp-baepsae@latest
|
|
104
127
|
```
|
|
105
128
|
|
|
106
129
|
### Automation flags
|
|
@@ -123,8 +146,8 @@ The installer supports multiple runtimes via `--runtime`:
|
|
|
123
146
|
| Flag | Command | When to use |
|
|
124
147
|
|---|---|---|
|
|
125
148
|
| `--runtime node` (default) | `node dist/index.js` | Local source build |
|
|
126
|
-
| `--runtime npx` | `npx -y mcp-baepsae` | npm registry, no global install |
|
|
127
|
-
| `--runtime bunx` | `bunx mcp-baepsae` | Bun users |
|
|
149
|
+
| `--runtime npx` | `npx -y mcp-baepsae@latest` | npm registry, no global install |
|
|
150
|
+
| `--runtime bunx` | `bunx mcp-baepsae@latest` | Bun users |
|
|
128
151
|
| `--runtime global` | `mcp-baepsae` | After `npm install -g mcp-baepsae` |
|
|
129
152
|
|
|
130
153
|
## Manual Setup (Fallback)
|
|
@@ -135,13 +158,13 @@ Use this when you do not want to run `scripts/install.sh`.
|
|
|
135
158
|
|
|
136
159
|
```bash
|
|
137
160
|
# Claude Code
|
|
138
|
-
claude mcp add baepsae -- npx -y mcp-baepsae
|
|
161
|
+
claude mcp add baepsae -- npx -y mcp-baepsae@latest
|
|
139
162
|
|
|
140
163
|
# Codex CLI
|
|
141
|
-
codex mcp add baepsae -- npx -y mcp-baepsae
|
|
164
|
+
codex mcp add baepsae -- npx -y mcp-baepsae@latest
|
|
142
165
|
|
|
143
166
|
# Gemini CLI
|
|
144
|
-
gemini mcp add --scope user --transport stdio baepsae npx -y mcp-baepsae
|
|
167
|
+
gemini mcp add --scope user --transport stdio baepsae npx -y mcp-baepsae@latest
|
|
145
168
|
```
|
|
146
169
|
|
|
147
170
|
### Using local build
|
|
@@ -159,10 +182,14 @@ gemini mcp add --scope user --transport stdio -e BAEPSAE_NATIVE_PATH=/ABS/PATH/n
|
|
|
159
182
|
|
|
160
183
|
## Project Structure
|
|
161
184
|
|
|
162
|
-
- MCP server: `src/index.ts`
|
|
163
|
-
-
|
|
185
|
+
- MCP server entry point: `src/index.ts`
|
|
186
|
+
- Tool modules: `src/tools/` (info, simulator, ui, input, media, system)
|
|
187
|
+
- Shared utilities: `src/utils.ts`, `src/types.ts`
|
|
188
|
+
- Native binary entry point: `native/Sources/main.swift`
|
|
189
|
+
- Native command handlers: `native/Sources/Commands/`
|
|
164
190
|
- Native binary output: `native/.build/release/baepsae-native`
|
|
165
|
-
-
|
|
191
|
+
- TS tests: `tests/mcp.contract.test.mjs`, `tests/unit.test.mjs`, `tests/mcp.real.test.mjs`
|
|
192
|
+
- Swift tests: `native/Tests/BaepsaeNativeTests/`
|
|
166
193
|
|
|
167
194
|
## Commands
|
|
168
195
|
|
|
@@ -176,62 +203,60 @@ npm run setup:mcp # Alias for scripts/install.sh
|
|
|
176
203
|
|
|
177
204
|
## MCP Tool Status
|
|
178
205
|
|
|
179
|
-
|
|
206
|
+
47 tools implemented end-to-end.
|
|
180
207
|
|
|
181
|
-
###
|
|
208
|
+
### Explicit target-scoped tools (30, recommended)
|
|
182
209
|
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
|
186
|
-
| `screenshot` | Capture simulator screen |
|
|
187
|
-
| `record_video` | Record simulator screen |
|
|
188
|
-
| `stream_video` | Stream video frames |
|
|
189
|
-
| `open_url` | Open URL in simulator (Safari/Deep Link) |
|
|
190
|
-
| `install_app` | Install .app or .ipa |
|
|
191
|
-
| `launch_app` | Launch app by Bundle ID |
|
|
192
|
-
| `terminate_app` | Terminate running app |
|
|
193
|
-
| `uninstall_app` | Uninstall app |
|
|
194
|
-
| `button` | Hardware buttons (home, lock, side, siri, apple-pay) |
|
|
195
|
-
| `gesture` | Preset gestures (scroll, swipe-edge) |
|
|
196
|
-
|
|
197
|
-
### macOS Only (4)
|
|
198
|
-
|
|
199
|
-
| Tool | Description |
|
|
210
|
+
Use these first to avoid simulator/macOS target ambiguity.
|
|
211
|
+
|
|
212
|
+
| Simulator-scoped | macOS-scoped |
|
|
200
213
|
|---|---|
|
|
201
|
-
| `
|
|
202
|
-
| `
|
|
203
|
-
| `
|
|
204
|
-
| `
|
|
214
|
+
| `sim_describe_ui` | `mac_describe_ui` |
|
|
215
|
+
| `sim_search_ui` | `mac_search_ui` |
|
|
216
|
+
| `sim_tap` | `mac_tap` |
|
|
217
|
+
| `sim_type_text` | `mac_type_text` |
|
|
218
|
+
| `sim_swipe` | `mac_swipe` |
|
|
219
|
+
| `sim_key` | `mac_key` |
|
|
220
|
+
| `sim_key_sequence` | `mac_key_sequence` |
|
|
221
|
+
| `sim_key_combo` | `mac_key_combo` |
|
|
222
|
+
| `sim_touch` | `mac_touch` |
|
|
223
|
+
| `sim_right_click` | `mac_right_click` |
|
|
224
|
+
| `sim_scroll` | `mac_scroll` |
|
|
225
|
+
| `sim_drag_drop` | `mac_drag_drop` |
|
|
226
|
+
| `sim_list_windows` | `mac_list_windows` |
|
|
227
|
+
| `sim_activate_app` | `mac_activate_app` |
|
|
228
|
+
| `sim_screenshot_app` | `mac_screenshot_app` |
|
|
205
229
|
|
|
206
|
-
###
|
|
230
|
+
### iOS Simulator Only (11)
|
|
207
231
|
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
| `type_text` | Type text input |
|
|
214
|
-
| `swipe` | Swipe gesture |
|
|
215
|
-
| `key` | HID keycode input |
|
|
216
|
-
| `key_sequence` | Sequential keycode input |
|
|
217
|
-
| `key_combo` | Modifier + key combination |
|
|
218
|
-
| `touch` | Touch down/up events |
|
|
219
|
-
| `right_click` | Right-click by ID/label or coordinates |
|
|
220
|
-
| `drag_drop` | Drag and drop |
|
|
221
|
-
| `clipboard` | Read/write clipboard |
|
|
222
|
-
| `list_windows` | List app windows |
|
|
223
|
-
| `activate_app` | Bring app to foreground |
|
|
224
|
-
| `screenshot_app` | Capture app window screenshot |
|
|
232
|
+
`list_simulators`, `screenshot`, `record_video`, `stream_video`, `open_url`, `install_app`, `launch_app`, `terminate_app`, `uninstall_app`, `button`, `gesture`
|
|
233
|
+
|
|
234
|
+
### macOS / System Only (4)
|
|
235
|
+
|
|
236
|
+
`list_apps`, `menu_action`, `get_focused_app`, `clipboard`
|
|
225
237
|
|
|
226
238
|
### Utility (2)
|
|
227
239
|
|
|
228
|
-
|
|
229
|
-
|---|---|
|
|
230
|
-
| `baepsae_help` | Show help info |
|
|
231
|
-
| `baepsae_version` | Show version info |
|
|
240
|
+
`baepsae_help`, `baepsae_version`
|
|
232
241
|
|
|
233
242
|
## Usage Examples
|
|
234
243
|
|
|
244
|
+
**Simulator app accessibility quickstart (inside app UI):**
|
|
245
|
+
```javascript
|
|
246
|
+
// 1) Launch your app in the target simulator
|
|
247
|
+
launch_app({ udid: "...", bundleId: "com.example.app" })
|
|
248
|
+
|
|
249
|
+
// 2) Inspect or search accessibility tree (in-app content scope by default)
|
|
250
|
+
sim_describe_ui({ udid: "..." })
|
|
251
|
+
sim_search_ui({ udid: "...", query: "Login" })
|
|
252
|
+
|
|
253
|
+
// 3) Interact by accessibility identifier/label
|
|
254
|
+
sim_tap({ udid: "...", id: "login-button" })
|
|
255
|
+
|
|
256
|
+
// Optional: include Simulator chrome/system UI in selector lookup
|
|
257
|
+
sim_tap({ udid: "...", label: "Home", all: true })
|
|
258
|
+
```
|
|
259
|
+
|
|
235
260
|
**Open a URL (iOS Simulator):**
|
|
236
261
|
```javascript
|
|
237
262
|
// Open Naver Mobile
|
|
@@ -256,7 +281,7 @@ terminate_app({ udid: "...", bundleId: "com.apple.mobilesafari" })
|
|
|
256
281
|
list_apps({})
|
|
257
282
|
|
|
258
283
|
// Take screenshot of a macOS app
|
|
259
|
-
|
|
284
|
+
mac_screenshot_app({ bundleId: "com.apple.Safari" })
|
|
260
285
|
```
|
|
261
286
|
|
|
262
287
|
## Troubleshooting
|