@mmerterden/multi-agent-toolkit-mcp 3.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.
Files changed (41) hide show
  1. package/CHANGELOG.md +871 -0
  2. package/LICENSE +21 -0
  3. package/README.md +358 -0
  4. package/README.tr.md +358 -0
  5. package/index.js +1725 -0
  6. package/package.json +89 -0
  7. package/tools/crash-logs/index.js +29 -0
  8. package/tools/design-check/content-cardinality.js +204 -0
  9. package/tools/design-check/geometry.js +140 -0
  10. package/tools/design-check/index.js +219 -0
  11. package/tools/design-check/mock-detect.js +213 -0
  12. package/tools/design-check/report.js +596 -0
  13. package/tools/design-check/scan.js +91 -0
  14. package/tools/design-check/scenario-inventory.js +598 -0
  15. package/tools/design-check/visual-compare.js +961 -0
  16. package/tools/ios-app-store-audit/context.js +181 -0
  17. package/tools/ios-app-store-audit/data/apple-required-sdks.json +32 -0
  18. package/tools/ios-app-store-audit/data/debug-tools-blocklist.json +133 -0
  19. package/tools/ios-app-store-audit/index.js +164 -0
  20. package/tools/ios-app-store-audit/models.js +57 -0
  21. package/tools/ios-app-store-audit/rules/asset-validation.js +72 -0
  22. package/tools/ios-app-store-audit/rules/binary-size.js +70 -0
  23. package/tools/ios-app-store-audit/rules/code-signing.js +95 -0
  24. package/tools/ios-app-store-audit/rules/dead-reference.js +131 -0
  25. package/tools/ios-app-store-audit/rules/debug-tool-leak.js +185 -0
  26. package/tools/ios-app-store-audit/rules/duplicate-resource.js +130 -0
  27. package/tools/ios-app-store-audit/rules/embedded-sdk.js +126 -0
  28. package/tools/ios-app-store-audit/rules/entitlement.js +105 -0
  29. package/tools/ios-app-store-audit/rules/extension-signing.js +105 -0
  30. package/tools/ios-app-store-audit/rules/info-plist.js +158 -0
  31. package/tools/ios-app-store-audit/rules/ipv6-compliance.js +101 -0
  32. package/tools/ios-app-store-audit/rules/privacy-manifest.js +121 -0
  33. package/tools/ios-app-store-audit/rules/production-hygiene.js +237 -0
  34. package/tools/ios-app-store-audit/rules/provisioning-profile.js +127 -0
  35. package/tools/ios-app-store-audit/rules/required-reason-api.js +123 -0
  36. package/tools/ios-app-store-audit/rules/sdk-floor.js +104 -0
  37. package/tools/ios-app-store-audit/rules/swift-abi.js +64 -0
  38. package/tools/ios-app-store-audit/rules/team-id.js +62 -0
  39. package/tools/ios-testflight/index.js +489 -0
  40. package/tools/ui-inspect/index.js +57 -0
  41. package/ui-tree-dumper.swift +122 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Mert Erden
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,358 @@
1
+ # @mmerterden/multi-agent-toolkit-mcp
2
+
3
+ [![npm version](https://img.shields.io/npm/v/@mmerterden/multi-agent-toolkit-mcp)](https://www.npmjs.com/package/@mmerterden/multi-agent-toolkit-mcp)
4
+ [![npm downloads](https://img.shields.io/npm/dw/@mmerterden/multi-agent-toolkit-mcp)](https://www.npmjs.com/package/@mmerterden/multi-agent-toolkit-mcp)
5
+ [![GitHub stars](https://img.shields.io/github/stars/mmerterden/multi-agent-toolkit-mcp)](https://github.com/mmerterden/multi-agent-toolkit-mcp)
6
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
7
+
8
+ 🇹🇷 Türkçe: [README.tr.md](./README.tr.md)
9
+
10
+ **83 tools** for iOS Simulator, Android Emulator, and headless web control. MCP server that lets your AI coding assistant see, interact with, and audit your mobile apps - plus drive browsers, run an 18-rule App Store compliance audit, and orchestrate multi-step batch flows.
11
+
12
+ Distributed on the **public npm registry** - `npx @mmerterden/multi-agent-toolkit-mcp` resolves with no auth, no token, no `~/.npmrc` setup.
13
+
14
+ **Verified on Claude Code, Copilot CLI and Codex CLI** - the three hosts the release gates actually exercise. Being a standard stdio MCP server it also runs in Cursor, Antigravity, VS Code Copilot Chat, Claude Desktop and any other MCP client; config snippets for those are below, but nothing here checks them.
15
+
16
+ That distinction is worth keeping straight. This line once called five hosts "the multi-agent-pipeline's full-orchestration targets", which stopped being true in pipeline v10.7.0 when the Cursor / Antigravity / Codex / Copilot Chat adapters were deleted. Codex CLI returned as a first-class target in pipeline v13.0.0 on capability - it now has skills, parallel sub-agents, hooks and MCP - and it is on the verified list only because a gate exercises it, not because it is supported elsewhere. Claiming hosts nobody exercises is not free either: 2.20.0 and 2.21.0 shipped an illegal `outputSchema` on the first tool, so Claude Code rejected the whole `tools/list` and served zero of the 78 - in the primary host, for two releases, with every gate in this repo green.
17
+
18
+ **7 categories:**
19
+ - **Device Control** (59 tools) - screenshot, tap, swipe, type, navigate, dark mode, locale, orientation, location, permissions, push notifications, real start/stop screen recording
20
+ - **Crash Diagnostics** (2 tools) - `ios_list_crashes` reads the host's DiagnosticReports, `android_list_crashes` dumps the adb crash buffer, both tail-bounded
21
+ - **Accessibility Audit** (2 tools) - auto-detect missing labels, small tap targets, missing identifiers (scope filtering supported)
22
+ - **Store Compliance** (5 tools) - App Store / Play Store readiness; **18-rule deep `ios_app_store_audit`** cross-references Apple ITMS error codes + App Store Review Guidelines (privacy manifest, required-reason API, Info.plist, code signing, entitlements, embedded SDK, IPv6, debug-tool leak, ...)
23
+ - **Web Automation** (8 tools) - Playwright-powered: goto, click (CSS selectors), type, eval JS, wait for selector, extract text, screenshot. Chromium / WebKit / Firefox engines. **Requires `playwright` peer dependency.**
24
+ - **Design Audit** (6 tools) - mock-mode vs Figma conformance: scenario inventory, mock detection, mock launch, live UI geometry, pixel/geometry/typography compare, and the HTML/PDF report with its coverage gate
25
+ - **Autonomous Agent DSL** (1 tool) - `agent_run_steps` executes a batch array of {tool, args, continue_on_error?, wait_ms?} steps in one MCP round trip. Ideal for scripted login flows, form fills, multi-step QA paths.
26
+
27
+ ## Quick Start
28
+
29
+ ### Option A - Install from source (recommended, no registry auth)
30
+
31
+ The simplest path. Works even if you haven't configured `~/.npmrc` yet.
32
+
33
+ ```bash
34
+ git clone git@github.com:mmerterden/multi-agent-toolkit-mcp.git
35
+ cd multi-agent-toolkit-mcp
36
+ npm install
37
+
38
+ # Optional: web tools require Playwright
39
+ npm i -g playwright && npx playwright install chromium
40
+
41
+ # Make it globally available as 'multi-agent-toolkit-mcp'
42
+ npm link
43
+ ```
44
+
45
+ Update later with `git pull && npm install` inside the clone. Pin to a specific version by checking out the corresponding tag (`git tag -l` to list).
46
+
47
+ ### Option B - npx (no setup needed - public registry)
48
+
49
+ ```bash
50
+ npx @mmerterden/multi-agent-toolkit-mcp
51
+ ```
52
+
53
+ ### Setup (after either Option A or B)
54
+
55
+ #### Claude Code / Claude Desktop
56
+
57
+ ```json
58
+ {
59
+ "mcpServers": {
60
+ "multi-agent-toolkit": {
61
+ "command": "npx",
62
+ "args": ["-y", "@mmerterden/multi-agent-toolkit-mcp"]
63
+ }
64
+ }
65
+ }
66
+ ```
67
+
68
+ #### Cursor
69
+
70
+ Add to `.cursor/mcp.json`:
71
+ ```json
72
+ {
73
+ "mcpServers": {
74
+ "multi-agent-toolkit": {
75
+ "command": "npx",
76
+ "args": ["-y", "@mmerterden/multi-agent-toolkit-mcp"]
77
+ }
78
+ }
79
+ }
80
+ ```
81
+
82
+ #### Antigravity
83
+
84
+ Add to `.agent/mcp_config.json` (or the global `~/.gemini/antigravity/mcp_config.json`):
85
+ ```json
86
+ {
87
+ "mcpServers": {
88
+ "multi-agent-toolkit": {
89
+ "command": "npx",
90
+ "args": ["-y", "@mmerterden/multi-agent-toolkit-mcp"]
91
+ }
92
+ }
93
+ }
94
+ ```
95
+
96
+ #### Copilot CLI
97
+
98
+ Add to `~/.copilot/settings.json`:
99
+ ```json
100
+ {
101
+ "mcpServers": {
102
+ "multi-agent-toolkit": {
103
+ "command": "npx",
104
+ "args": ["-y", "@mmerterden/multi-agent-toolkit-mcp"]
105
+ }
106
+ }
107
+ }
108
+ ```
109
+
110
+ #### Codex CLI
111
+
112
+ Let Codex write its own config - it owns `~/.codex/config.toml` (marketplace and
113
+ plugin state live there too), and the command is idempotent:
114
+
115
+ ```bash
116
+ codex mcp add multi-agent-toolkit -- npx -y @mmerterden/multi-agent-toolkit-mcp
117
+ codex mcp list # confirm
118
+ codex doctor --json # checks["mcp.config"] should read ok
119
+ ```
120
+
121
+ For reference, that produces:
122
+ ```toml
123
+ [mcp_servers.multi-agent-toolkit]
124
+ command = "npx"
125
+ args = ["-y", "@mmerterden/multi-agent-toolkit-mcp"]
126
+ ```
127
+
128
+ The multi-agent pipeline's `install --codex` runs the `codex mcp add` step for you.
129
+
130
+ ## Troubleshooting
131
+
132
+ ### `npx @mmerterden/multi-agent-toolkit-mcp` fails with a 401/404, or resolves an old version
133
+
134
+ This package is on the **public** npm registry - no token needed. If it still
135
+ fails, the most likely cause is a leftover scope override from before this
136
+ package moved off GitHub Packages: check `~/.npmrc` for a line like
137
+ `@mmerterden:registry=https://npm.pkg.github.com`. That line redirects **every**
138
+ `@mmerterden`-scoped install/publish (this package included) to GitHub
139
+ Packages, which 401s an unauthenticated read even for a public-looking package
140
+ name. Remove that line (or scope it to whichever `@mmerterden` package
141
+ actually needs GitHub Packages) and retry.
142
+
143
+ #### VS Code Copilot Chat
144
+
145
+ Add to `.vscode/mcp.json`:
146
+ ```json
147
+ {
148
+ "servers": {
149
+ "multi-agent-toolkit": {
150
+ "command": "npx",
151
+ "args": ["-y", "@mmerterden/multi-agent-toolkit-mcp"]
152
+ }
153
+ }
154
+ }
155
+ ```
156
+
157
+ ### Requirements
158
+
159
+ - **Node.js 18+**
160
+ - **iOS tools**: macOS + Xcode (provides `xcrun simctl`)
161
+ - **Android tools**: Android SDK Platform-Tools (provides `adb`)
162
+ - **Web tools** (optional): `playwright` - install once:
163
+ ```bash
164
+ npm i -g playwright && npx playwright install chromium
165
+ ```
166
+ (or `webkit` / `firefox` - choose engine per `web_goto` call.)
167
+
168
+ > If Xcode is not installed, iOS tools return a friendly message instead of crashing. Same for Android and Web tools - use what you have.
169
+
170
+ ### Agent DSL Example
171
+
172
+ Run a scripted login flow in one MCP call:
173
+
174
+ ```json
175
+ {
176
+ "tool": "agent_run_steps",
177
+ "args": {
178
+ "steps": [
179
+ { "tool": "web_goto", "args": { "url": "https://example.com/login" } },
180
+ { "tool": "web_type", "args": { "selector": "#email", "text": "user@example.com" } },
181
+ { "tool": "web_type", "args": { "selector": "#password", "text": "s3cret" } },
182
+ { "tool": "web_click", "args": { "selector": "button[type=submit]" }, "wait_ms": 1000 },
183
+ { "tool": "web_wait_for", "args": { "selector": ".dashboard" } },
184
+ { "tool": "web_screenshot", "args": { "full_page": true } }
185
+ ]
186
+ }
187
+ }
188
+ ```
189
+
190
+ Returns per-step status so the agent can self-correct on failure.
191
+
192
+ ### iOS Tools (38)
193
+
194
+ | Tool | Description |
195
+ |------|-------------|
196
+ | `ios_list_devices` | List all available simulators |
197
+ | `ios_boot_device` | Boot a simulator |
198
+ | `ios_screenshot` | Capture screenshot (base64 PNG) |
199
+ | `ios_tap` | Tap at coordinates |
200
+ | `ios_swipe` | Swipe gesture |
201
+ | `ios_type_text` | Type text into focused field |
202
+ | `ios_launch_app` | Launch app by bundle ID |
203
+ | `ios_terminate_app` | Terminate app |
204
+ | `ios_list_apps` | List installed apps |
205
+ | `ios_go_home` | Press home button |
206
+ | `ios_set_appearance` | Set light/dark mode |
207
+ | `ios_set_content_size` | Set Dynamic Type size |
208
+ | `ios_set_locale` | Change app language |
209
+ | `ios_open_url` | Open URL or deep link |
210
+ | `ios_status_bar` | Override status bar - supports presets (`clean` 9:41/100% for App Store screenshots, `testing`, `low-battery`, `airplane`) plus manual time/battery |
211
+ | `ios_push_notification` | Send simulated push |
212
+ | `ios_grant_permission` | Grant privacy permission |
213
+ | `ios_revoke_permission` | Revoke permission |
214
+ | `ios_reset_permissions` | Reset all permissions |
215
+ | `ios_set_location` | Set simulated GPS |
216
+ | `ios_clear_location` | Clear location |
217
+ | `ios_set_increase_contrast` | Toggle Increase Contrast |
218
+ | `ios_record_video` | Screen recording - action:"start" records in the background, action:"stop" returns the video file |
219
+ | `ios_add_media` | Add to photo library |
220
+ | `ios_keychain_reset` | Reset keychain |
221
+ | `ios_get_app_container` | Get app file path |
222
+ | `ios_erase_device` | Factory reset simulator |
223
+ | `ios_get_ui_tree` | Accessibility UI tree |
224
+ | `ios_accessibility_audit` | Auto-audit: missing labels, small tap targets, missing identifiers |
225
+ | `ios_biometric` | Simulate Face ID / Touch ID (match or fail) |
226
+ | `ios_archive_audit` | Audit .xcarchive for App Store compliance (lighter, deprecated - use `ios_app_store_audit`) |
227
+ | `ios_app_store_audit` | Deep 18-rule App Store compliance audit on .xcarchive - covers privacy manifest, required-reason API, Info.plist, code signing, entitlements, embedded SDK, IPv6, debug-tool leak, binary size, dead refs, duplicate resources, team ID, provisioning profile, Swift ABI, extension signing, asset validation, production hygiene, SDK floor (ITMS-90725). Cross-references Apple ITMS error codes + App Store Review Guidelines |
228
+ | `ios_export_ipa` | Export a .xcarchive to a signed .ipa via `xcodebuild -exportArchive`. Generates the exportOptions.plist from arguments (method defaults to `app-store-connect`). A run that exits 0 without producing an .ipa is reported as a failure |
229
+ | `ios_testflight_validate` | Apple's own pre-submission validation via `xcrun altool --validate-app`, with returned ITMS codes mapped onto the App Store rule each implies. Catches what static analysis structurally cannot: unregistered bundle ID, profile/app-record mismatch, an already-used version+build, entitlements not provisioned for the App ID. 3-tier auth (ASC API key → Apple ID + app-specific password by keychain/env reference → `SKIPPED` with a reason). **`SKIPPED` is not a pass** |
230
+ | `ios_xcodebuild` | Build / test / clean / archive an Xcode project. Returns one-line summary + xcresult ID; full log stays out of context |
231
+ | `ios_xcresult` | Drill into a previous build by ID - modes: `summary`, `errors`, `warnings`, `log`, `tests`. Token-efficient progressive disclosure |
232
+ | `ios_visual_diff` | Compare two PNG screenshots (pixelmatch). Returns diff_pct, pass/fail vs threshold, optional diff PNG. Useful for snapshot regressions across light/dark, locale, dynamic type |
233
+ | `ios_list_crashes` | List recent crash reports from the host's DiagnosticReports - filter by process name, bound by age and count |
234
+
235
+ ### Android Tools (30)
236
+
237
+ | Tool | Description |
238
+ |------|-------------|
239
+ | `android_list_devices` | List connected devices |
240
+ | `android_screenshot` | Capture screenshot (base64 PNG) |
241
+ | `android_tap` | Tap at coordinates |
242
+ | `android_swipe` | Swipe gesture |
243
+ | `android_type_text` | Type text |
244
+ | `android_key_event` | Send key event (HOME, BACK, ENTER) |
245
+ | `android_launch_app` | Launch app by package |
246
+ | `android_stop_app` | Force-stop app |
247
+ | `android_list_packages` | List installed packages |
248
+ | `android_go_home` | Press home |
249
+ | `android_go_back` | Press back |
250
+ | `android_get_ui_tree` | UI hierarchy (uiautomator XML) - `path` writes the raw dump to a file, filter:"interactive" returns a compact actionable-element list |
251
+ | `android_set_dark_mode` | Toggle dark mode |
252
+ | `android_set_font_scale` | Set font scale |
253
+ | `android_set_locale` | Change locale |
254
+ | `android_set_location` | Mock GPS location |
255
+ | `android_grant_permission` | Grant runtime permission |
256
+ | `android_revoke_permission` | Revoke permission |
257
+ | `android_record_screen` | Screen recording - action:"start" records in the background, action:"stop" pulls the video off the device |
258
+ | `android_install_apk` | Install APK |
259
+ | `android_uninstall_app` | Uninstall app |
260
+ | `android_logcat` | View logs |
261
+ | `android_get_screen_size` | Get screen resolution |
262
+ | `android_open_url` | Open URL or deep link |
263
+ | `android_clear_app_data` | Clear app data |
264
+ | `android_accessibility_audit` | Auto-audit: missing contentDescription, small touch targets, missing resource-id |
265
+ | `android_launch_time` | Measure cold start launch time (ms) |
266
+ | `android_apk_audit` | Audit APK for Play Store compliance |
267
+ | `android_list_crashes` | Dump the adb crash log buffer, tail-bounded |
268
+ | `android_set_orientation` | Rotate to portrait/landscape (pins user_rotation, disables auto-rotate) |
269
+
270
+ ### Design Tools (6)
271
+
272
+ Mock-mode vs Figma design audit. Generic and platform-agnostic - the heavy orchestration (Figma fetch, variant matching, screen navigation, report assembly) is expected to live in the caller; these expose the mechanical primitives.
273
+
274
+ | Tool | Description |
275
+ |------|-------------|
276
+ | `design_mock_detect` | Detect whether a project supports a mock/stub mode (`true` / `false` / `debug-only`) via naming conventions, `#if DEBUG` DI, MockData fixtures, and well-known runtime switch keys (extendable). Returns activation + variant hints + evidence. |
277
+ | `design_scenario_inventory` | Enumerate every state driver the mock build exposes - relaunch flags, `*Scenario` / `*Outcome` enum cases, reference-prefix variants (`hasPrefix("F6DI")` branches inside per-screen mock repositories, typically the largest group), flow-wide scenario codes, MockData fixtures, custom-scheme deep links - each with file+line evidence. Prices every target (`relaunch` vs `in-app`) and batches them into a run `plan`, so one relaunch serves every in-app state on that screen. Gives an audit a countable target set instead of "walk the UI until it feels done". |
278
+ | `design_mock_launch` | Launch an installed app in mock mode (iOS UserDefaults launch arg / Android intent extra). |
279
+ | `design_ui_geometry` | Flat element bounding boxes of the current screen + screen size, for px-level spacing measurement. |
280
+ | `design_visual_compare` | Compare a Figma render vs a live screenshot without failing on size mismatch: normalizes scale, crops chrome, reports perceptual diff %, spacing/size/position (px), color (ΔE), and typography. Writes figma/live/diff/overlay/side-by-side PNGs. |
281
+ | `design_report` | Render a design-audit report object to self-contained HTML (base64 images, CSS-positioned annotations) + optional PDF. Enforces a coverage gate: every target must be audited or skipped with an explicit reason, so a partial audit cannot render as a clean report. Wording comes from a label pack (English default, Turkish built in). |
282
+
283
+ ### Use Cases
284
+
285
+ - **Visual bug hunting** - Screenshot every screen, AI analyzes for layout issues
286
+ - **Dark mode testing** - Toggle appearance, screenshot, compare
287
+ - **Accessibility audit** - Auto-detect missing labels, small tap targets (<44pt iOS / <48dp Android)
288
+ - **Store compliance** - Audit .xcarchive or .apk before submission (signing, debug tools, privacy manifest)
289
+ - **Biometric testing** - Simulate Face ID / Touch ID success and failure flows
290
+ - **Performance** - Measure Android cold start time (ms)
291
+ - **Localization testing** - Switch locale, screenshot all screens
292
+ - **App Store screenshots** - Clean status bar + automated navigation
293
+ - **Regression testing** - Tap through flows, verify behavior
294
+
295
+ ### How It Works
296
+
297
+ ```mermaid
298
+ graph LR
299
+ subgraph "You"
300
+ PROMPT["Prompt"]
301
+ end
302
+
303
+ subgraph "AI Assistant"
304
+ AI["Claude Code / Copilot CLI (verified)\nany other MCP client"]
305
+ end
306
+
307
+ subgraph "multi-agent-toolkit-mcp"
308
+ MCP["MCP Server"]
309
+ IOS["iOS Tools (37)\nxcrun simctl"]
310
+ AND["Android Tools (28)\nadb"]
311
+ WEB["Web Tools (8)\nPlaywright"]
312
+ DSL["Agent DSL (1)\nBatch runner"]
313
+ end
314
+
315
+ subgraph "Devices"
316
+ SIM["📱 iOS Simulator"]
317
+ EMU["🤖 Android Emulator"]
318
+ BROWSER["🌐 Browser"]
319
+ end
320
+
321
+ PROMPT --> AI
322
+ AI -- "MCP Protocol" --> MCP
323
+ MCP --> IOS --> SIM
324
+ MCP --> AND --> EMU
325
+ MCP --> WEB --> BROWSER
326
+ MCP --> DSL
327
+ SIM -- "screenshot / UI tree" --> AI
328
+ EMU -- "screenshot / UI tree" --> AI
329
+ BROWSER -- "screenshot / text" --> AI
330
+
331
+ style MCP fill:#8b5cf6,color:#fff
332
+ style IOS fill:#3b82f6,color:#fff
333
+ style AND fill:#10b981,color:#fff
334
+ style WEB fill:#f59e0b,color:#fff
335
+ ```
336
+
337
+ 1. Your AI assistant decides it needs to interact with a device
338
+ 2. It calls a tool like `ios_screenshot` or `android_tap` via MCP protocol
339
+ 3. This server receives the call and runs the native command (`xcrun simctl` or `adb`)
340
+ 4. The result (screenshot, UI tree, action confirmation) is returned to the AI
341
+ 5. The AI analyzes the result and decides the next action
342
+
343
+ **What it wraps:**
344
+ - **iOS**: `xcrun simctl` (part of Xcode Command Line Tools)
345
+ - **Android**: `adb` (part of Android SDK Platform-Tools)
346
+ - **Web**: Playwright (Chromium / WebKit / Firefox)
347
+
348
+ **What it does NOT do:**
349
+ - Does not access your source code
350
+ - Does not send data to any server
351
+ - Does not require an account or API key
352
+ - Does not modify your project files
353
+
354
+ Everything runs locally on your machine.
355
+
356
+ ## License
357
+
358
+ MIT