{
  "markdown": "# SilbercueSwift\n\n[![GitHub Release](https://img.shields.io/github/v/release/silbercue/SilbercueSwift)](https://github.com/silbercue/SilbercueSwift/releases)\n[![Free — 49 tools](https://img.shields.io/badge/Free-49_tools-brightgreen)](https://github.com/silbercue/SilbercueSwift#free-vs-pro)\n[![Pro available](https://img.shields.io/badge/Pro-58_tools-blueviolet)](https://buy.polar.sh/polar_cl_tfgJc6diWXZBODr4AG8nnl1oYPI9rJJCjuoFy0y63lJ)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![MCP Registry](https://img.shields.io/badge/MCP_Registry-published-green)](https://registry.modelcontextprotocol.io)\n[![Platform](https://img.shields.io/badge/platform-macOS_13%2B-blue)]()\n[![Swift 6.0](https://img.shields.io/badge/Swift-6.0-orange)](https://swift.org)\n[![SilbercueSwift MCP server](https://glama.ai/mcp/servers/Silbercue/SilbercueSwift/badges/card.svg)](https://glama.ai/mcp/servers/Silbercue/SilbercueSwift)\n\n<picture>\n  <source media=\"(prefers-color-scheme: dark)\" srcset=\"docs/assets/coverage-dark.svg\">\n  <img alt=\"Capabilities covered, of 19 compared: SilbercueSwift 18, XcodeBuildMCP 6, Appium-MCP 4, iosef 1\" src=\"docs/assets/coverage-light.svg\" width=\"820\">\n</picture>\n\nThe fastest, most complete MCP server for iOS development. One Swift binary, 58 tools, zero dependencies. **SilbercueSwift has the most complete toolset of any alternative out there.**\n\nBuilt for [Claude Code](https://claude.ai/claude-code), [Cursor](https://cursor.sh), and any MCP-compatible AI agent.\n\n> **Looking for an alternative to existing iOS MCP servers?** SilbercueSwift covers the full feature set of XcodeBuildMCP, Appium-MCP, and iosef in a single binary — plus xcresult parsing, UI automation, code coverage, and up to 75x faster screenshots. [See comparison below](#comparison-with-other-mcp-servers).\n\n## Why SilbercueSwift?\n\nEvery iOS MCP server has the same problem: **raw xcodebuild output is useless for AI agents.** 500 lines of build log, stderr noise mistaken for errors, no structured test results. Agents waste minutes parsing what a human sees in seconds.\n\nSilbercueSwift fixes this. It parses `.xcresult` bundles — the same structured data Xcode uses internally — and returns exactly what the agent needs: pass/fail counts, failure messages with file:line, code coverage per file, and failure screenshots.\n\n| What you get | XcodeBuildMCP | Appium-MCP | iosef | SilbercueSwift |\n|---|---|---|---|---|\n| Screenshot latency | ~1127ms | ~77ms | ~83ms | **~316ms**<br>(<img src=\"https://img.shields.io/badge/Pro-blueviolet?style=flat-square\" align=\"center\"> **~15ms**, 75x) |\n| View hierarchy | ~259ms | ~938ms | ~44ms | **~31ms**<br>(<img src=\"https://img.shields.io/badge/Pro-blueviolet?style=flat-square\" align=\"center\"> **~5ms**) |\n| Find element | — | 76ms | 50ms | **31ms**<br>(<img src=\"https://img.shields.io/badge/Pro-blueviolet?style=flat-square\" align=\"center\"> **<1ms** + auto-scroll) |\n| Tap (coordinates) | 235ms | 470ms | 48ms | **16ms**<br>(<img src=\"https://img.shields.io/badge/Pro-blueviolet?style=flat-square\" align=\"center\"> **4ms**) |\n| Swipe | 1284ms | 2685ms | 262ms | **~250ms** |\n| Build for simulator | Yes | — | — | **Yes** |\n| Build + Run in one call | Yes (sequential) | — | — | **Yes (parallel, ~9s faster)** |\n| Structured test results | Partial | — | — | **Full xcresult JSON** |\n| Failure screenshots from xcresult | — | — | — | **Auto-exported** |\n| Code coverage per file | Basic | — | — | **Sorted, filterable** |\n| Build error diagnosis | stderr parsing | — | — | **xcresult JSON with file:line** |\n| Navigate (find + tap + verify) | — | — | — | **1 call (~380ms)** |\n| Double tap | — | — | — | **~60ms** |\n| Drag & drop | — | Coordinates only (3 calls) | — | **Element-to-element (1 call)** |\n| Scroll to element | — | Manual swipe loop | — | **SmartScroll (1 call)** <img src=\"https://img.shields.io/badge/Pro-blueviolet?style=flat-square\" align=\"center\"> |\n| Alert handling | — | Single alert | — | **3-tier search + batch accept_all** <img src=\"https://img.shields.io/badge/Pro-blueviolet?style=flat-square\" align=\"center\"> |\n| iOS 18 ContactsUI dialog | — | — | — | **Supported** |\n| Batch UI automation | — | — | — | **run_plan: multi-step plans with adaptive decisions** |\n| Log filtering | Subsystem only | — | Partial | **Topic-filtered: 90% fewer tokens** <img src=\"https://img.shields.io/badge/Pro-blueviolet?style=flat-square\" align=\"center\"> |\n| Console log per failed test | — | — | — | **Optional** |\n| Wait for log pattern | — | — | — | **Regex + timeout** |\n| Visual regression | — | — | — | **Baseline + pixel diff** <img src=\"https://img.shields.io/badge/Pro-blueviolet?style=flat-square\" align=\"center\"> |\n| Multi-device check | — | — | — | **Dark Mode, Landscape, iPad** <img src=\"https://img.shields.io/badge/Pro-blueviolet?style=flat-square\" align=\"center\"> |\n| Cross-platform (Android) | — | Yes | — | — |\n| Tools | 77 (Rust) | 61 (Node.js + Appium) | 15 (Swift) | **58 (Native Swift, 8.5MB)** |\n| Cold start | ~400ms | ~1000ms | ~100ms | **~50ms** |\n\n### Where SilbercueSwift really shines\n\n> ![killer feat](https://img.shields.io/badge/killer%20feat-%23FFD700?style=flat-square) **Screenshots up to 75x faster** — ~316ms (<img src=\"https://img.shields.io/badge/Pro-blueviolet?style=flat-square\" align=\"center\"> ~15ms)\n\nFree tier screenshots (~316ms) are faster than XcodeBuildMCP (~1127ms) and most alternatives. Pro brings latency down to ~15ms — 5x faster than Appium, 75x faster than XcodeBuildMCP. Agents can take screenshots freely without penalty at either tier.\n\n> ![killer feat](https://img.shields.io/badge/killer%20feat-%23FFD700?style=flat-square) **Structured test results from xcresult bundles** — zero guesswork on failures\n\nWhen a test fails, the agent gets the error message, the exact file:line, a screenshot of the failure state, and optionally the console output — all parsed from Apple's `.xcresult` format. No guessing from 500 lines of xcodebuild stderr. This is the difference between \"agent knows what broke\" and \"agent guesses what broke\".\n\n> ![killer feat](https://img.shields.io/badge/killer%20feat-%23FFD700?style=flat-square) **Single binary, zero dependencies** — 58 tools, install in 10 seconds\n\n`brew install silbercue/silbercue/silbercueswift` — done. 8.5MB native Swift binary. No Node.js, no npm, no Appium server, no Python, no Java, no Rust toolchain. Cold start in ~50ms. The fastest way to get an iOS MCP server running.\n\n> ![killer feat](https://img.shields.io/badge/killer%20feat-%23FFD700?style=flat-square) **Agent reads only what matters — 90% fewer tokens, zero wasted calls** (topic filtering <img src=\"https://img.shields.io/badge/Pro-blueviolet?style=flat-square\" align=\"center\">)\n\nFree tier already strips noise: 15 known noise processes are excluded at capture time, and duplicate lines are collapsed (79% I/O reduction). Pro adds topic filtering — `read_logs` categorizes lines into 8 topics and shows only app + crashes by default, with a menu: `network(87) lifecycle(12) springboard(8)`. The agent opens specific topics in one call — no guessing, no iteration.\n\n> ![strong](https://img.shields.io/badge/strong-%23C0C0C0?style=flat-square) **One call to dismiss all permission dialogs** — 3 alerts in 1 roundtrip <img src=\"https://img.shields.io/badge/Pro-blueviolet?style=flat-square\" align=\"center\">\n\nEvery app shows 2–3 permission dialogs on first launch. Other servers require the agent to screenshot → find button → click, per dialog. `handle_alert(action: \"accept_all\")` clears them all in a single call, searching across SpringBoard, ContactsUI, and the active app. Free tier handles alerts individually with `accept` / `dismiss`.\n\n> ![strong](https://img.shields.io/badge/strong-%23C0C0C0?style=flat-square) **Drag & drop with element IDs** — 1 call instead of 3 <img src=\"https://img.shields.io/badge/Pro-blueviolet?style=flat-square\" align=\"center\">\n\n\"Drag item A above item B\" is a single call: `drag_and_drop(source_element: \"el-0\", target_element: \"el-1\")`. The competition only supports raw coordinates, forcing the agent to find both elements, extract their frames, and build a W3C Actions sequence — 3 calls minimum.\n\n> ![strong](https://img.shields.io/badge/strong-%23C0C0C0?style=flat-square) **Auto-scroll to off-screen elements** — no more manual swipe loops <img src=\"https://img.shields.io/badge/Pro-blueviolet?style=flat-square\" align=\"center\">\n\n`find_element(using: \"accessibility id\", value: \"Save\", scroll: true)` scrolls automatically until the element appears. SmartScroll handles UIKit, SwiftUI, and lazy-loaded lists — no guessing scroll direction.\n\n> ![strong](https://img.shields.io/badge/strong-%23C0C0C0?style=flat-square) **View hierarchy in ~31ms (Free) / ~5ms (Pro)** — up to 188x faster element inspection\n\n`get_source` returns the full UI tree in ~31ms (Free) or ~5ms (Pro). The fastest competitor takes 44ms, most take 250ms+. This makes element inspection practically free for agents.\n\n> ![killer feat](https://img.shields.io/badge/killer%20feat-%23FFD700?style=flat-square) **Navigate in one call** — find + tap + settle + screenshot in ~380ms\n\n`navigate(to: \"Settings\")` finds the element, taps it, waits for the screen to settle, and returns a verification screenshot — all in a single call. No competitor offers this. Agents save 3-4 tool calls per navigation step.\n\n> ![strong](https://img.shields.io/badge/strong-%23C0C0C0?style=flat-square) **Batch UI automation** — run_plan executes multi-step plans with adaptive decisions\n\n`run_plan` takes a sequence of UI steps and executes them server-side. When a step needs a decision (unexpected dialog, element not found), it falls back through 4 tiers — from MCP sampling to pause & resume. No more \"one tool call per tap\" overhead.\n\n## Quick Start\n\n### Install via Homebrew\n\n```bash\nbrew tap silbercue/silbercue\nbrew install silbercueswift\n```\n\n### Or build from source\n\n```bash\ngit clone https://github.com/silbercue/SilbercueSwift.git\ncd SilbercueSwift\nswift build -c release\ncp .build/release/SilbercueSwift /usr/local/bin/\n```\n\n### Configure in Claude Code\n\nOne command — installs globally for all projects:\n\n```bash\nclaude mcp add --scope user SilbercueSwift /opt/homebrew/bin/SilbercueSwift\n```\n\n> **Note:** Use the full path (`/opt/homebrew/bin/SilbercueSwift`). Claude Code starts MCP servers without a full shell PATH, so bare command names won't be found.\n\n### Configure in Cursor\n\nAdd to `~/.cursor/mcp.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"SilbercueSwift\": {\n      \"command\": \"/opt/homebrew/bin/SilbercueSwift\"\n    }\n  }\n}\n```\n\n### Configure in other MCP clients (Cline, Continue, etc.)\n\nAny client that supports stdio MCP servers: point to `/opt/homebrew/bin/SilbercueSwift` with no arguments.\n\n### Uninstall\n\n```bash\nclaude mcp remove --scope user SilbercueSwift\nbrew uninstall silbercueswift\nbrew untap silbercue/silbercue\n```\n\n## Free vs Pro\n\nSilbercueSwift ships 49 tools for free — build, test, simulate, automate UI, capture logs, and take screenshots. No time limit, no signup.\n\nPro adds 9 tools and faster internals for teams and power users who need the full picture.\n\n| | Free | Pro |\n|---|---|---|\n| Build, test, sim management | 49 tools | 58 tools |\n| Screenshot | ~316ms | **~15ms (75x faster)** |\n| Structured test results (xcresult) | Yes | Yes |\n| Find element | 31ms | **<1ms** |\n| View hierarchy | 31ms | **~5ms** |\n| Tap (coordinates) | 16ms | **4ms** |\n| Click / type / swipe / double tap / long press / drag & drop | Yes | Yes |\n| Navigate (find + tap + verify) | Yes | Yes |\n| Batch UI automation (run_plan) | Yes | Yes |\n| Alert handling | Single accept/dismiss | + Batch accept_all / dismiss_all |\n| Log capture | Smart + verbose | + App mode, topic filtering |\n| Console capture, git tools | Yes | Yes |\n| Scroll to element | — | SmartScroll |\n| Visual regression | — | Baseline + pixel diff |\n| Multi-device check | — | Dark Mode, Landscape, iPad |\n| Accessibility check | — | Dynamic Type rendering |\n| Localization check | — | Multi-language + RTL |\n| Pinch / zoom | — | Yes |\n\nPro costs 12 EUR/month. [Get a license on Polar.sh](https://buy.polar.sh/polar_cl_tfgJc6diWXZBODr4AG8nnl1oYPI9rJJCjuoFy0y63lJ), then:\n\n```bash\nsilbercueswift activate <YOUR-LICENSE-KEY>\n```\n\n## 58 Tools in 14 Categories\n\n### Build (5 tools)\n\n| Tool | Description |\n|---|---|\n| `build_sim` | Build for iOS Simulator — returns structured errors + caches bundle ID & app path |\n| `build_run_sim` | Build + boot + install + launch in one call — parallel 2-phase pipeline, ~9s faster than sequential |\n| `clean` | Clean build artifacts |\n| `discover_projects` | Find .xcodeproj/.xcworkspace files |\n| `list_schemes` | List available schemes |\n\n### Testing & Diagnostics (4 tools)\n\n| Tool | Description |\n|---|---|\n| `test_sim` | Run tests + structured xcresult summary (pass/fail/duration) |\n| `test_failures` | Failed tests with error messages, file:line, and failure screenshots |\n| `test_coverage` | Code coverage per file, sorted and filterable |\n| `build_and_diagnose` | Build + structured errors/warnings from xcresult |\n\n### Simulator (12 tools)\n\n| Tool | Description |\n|---|---|\n| `list_sims` | List available simulators |\n| `boot_sim` | Boot a simulator |\n| `shutdown_sim` | Shut down a simulator |\n| `install_app` | Install .app bundle |\n| `launch_app` | Launch app by bundle ID |\n| `terminate_app` | Terminate running app |\n| `clone_sim` | Clone an existing simulator |\n| `erase_sim` | Erase simulator content and settings |\n| `delete_sim` | Delete a simulator |\n| `set_orientation` | Rotate device (PORTRAIT, LANDSCAPE_LEFT, LANDSCAPE_RIGHT) via WDA |\n| `sim_status` | Simulator state (booted/shutdown, device type, runtime) |\n| `sim_inspect` | Detailed simulator info (data path, log path, UDID) |\n\n### UI Automation (16 tools)\n\nNative input for gestures, WDA for element queries and alerts — no Appium, no Node.js, no Python.\n\n| Tool | Description | Latency |\n|---|---|---|\n| `handle_alert` | **Accept, dismiss, or batch-handle system & in-app alerts** | ~200ms |\n| `find_element` / `find_elements` | Find elements by accessibility ID, predicate, class chain. **`scroll: true` auto-scrolls** until the element appears (SmartScroll — 3 fallback strategies) | **31ms**<br>(<img src=\"https://img.shields.io/badge/Pro-blueviolet?style=flat-square\" align=\"center\"> **<1ms**) |\n| `click_element` | Tap a UI element | **~75ms** |\n| `tap_coordinates` | Coordinate-based tap | **~16ms**<br>(<img src=\"https://img.shields.io/badge/Pro-blueviolet?style=flat-square\" align=\"center\"> **~4ms**) |\n| `double_tap` / `long_press` | Double tap or long press at coordinates | **~60ms** / **~1000ms** |\n| `swipe` | Directional swipe | **~250ms** |\n| `pinch` | Zoom in/out | ~400ms <img src=\"https://img.shields.io/badge/Pro-blueviolet?style=flat-square\" align=\"center\"> |\n| `drag_and_drop` | **Drag from source to target** — element-to-element, coordinates, or mixed. Smart defaults for reorderable lists, Kanban boards, sliders | **~1.3s** |\n| `navigate` | **Find + tap + settle + screenshot in 1 call** — saves 3-4 roundtrips | **~380ms** |\n| `type_text` / `get_text` | Type into or read from elements | ~100-300ms |\n| `get_source` | Full view hierarchy (JSON/XML) | **~31ms**<br>(<img src=\"https://img.shields.io/badge/Pro-blueviolet?style=flat-square\" align=\"center\"> **~5ms**) |\n| `wda_status` / `wda_create_session` | WDA health check & session management | ~50-100ms |\n\n#### handle_alert — the smartest alert handler\n\n```bash\n# Accept a single alert with smart defaults\nhandle_alert(action: \"accept\")\n\n# Dismiss with a specific button label\nhandle_alert(action: \"dismiss\", button_label: \"Not Now\")\n\n# Batch-accept ALL alerts after app launch (unique to SilbercueSwift)\nhandle_alert(action: \"accept_all\")\n```\n\n**3-tier alert search** — finds alerts across:\n1. **Springboard** — system permission dialogs (Location, Camera, Tracking)\n2. **ContactsUI** — iOS 18+ Contacts \"Limited Access\" dialog (separate process)\n3. **Active app** — in-app `UIAlertController` dialogs\n\n**Smart defaults** — knows which button to tap:\n- Accept: \"Allow\" → \"Allow While Using App\" → \"OK\" → \"Continue\" → last button\n- Dismiss: \"Don't Allow\" (handles Unicode U+2019) → \"Cancel\" → \"Not Now\" → first button\n\n**Batch mode** — `accept_all` / `dismiss_all` loops through multiple sequential alerts server-side. One HTTP roundtrip instead of N. Returns details of every handled alert.\n\nThese capabilities go beyond what other iOS MCP servers currently offer.\n\n### Screenshots (1 tool)\n\n| Tool | Latency |\n|---|---|\n| `screenshot` | Free: **~316ms** / Pro: **~15ms** |\n\n### Logs (4 tools)\n\n| Tool | Description |\n|---|---|\n| `start_log_capture` | **Smart-filtered os_log stream** — 3 modes: `smart` (default, topic filtering enabled), `app` (tight stream, auto-detected), `verbose` (unfiltered). Deduplicates repetitive lines. |\n| `stop_log_capture` | Stop capture |\n| `read_logs` | **Topic-filtered reading** — default: app + crashes only. Response includes topic menu with line counts. Add topics via `include` parameter. |\n| `wait_for_log` | Wait for regex pattern with timeout — eliminates sleep() hacks |\n\n#### Smart Log Filtering — 4 layers, zero config\n\n```bash\n# Start capture (default: smart mode — broad stream, topic filtering enabled)\nstart_log_capture()\n\n# Read logs — default shows only app logs + crashes + topic menu\nread_logs()\n# → --- 230 buffered, 42 shown [app, crashes] ---\n# → Topics: app(35) crashes(2) | network(87) lifecycle(12) springboard(8) widgets(0) background(3) system(83)\n# → Hint: include=[\"network\"] to add SSL/TLS + background transfer logs\n# → ---\n# → [42 filtered lines]\n\n# Agent sees network(87) and wants SSL details — one call:\nread_logs(include: [\"network\"])\n\n# Narrow stream for production monitoring:\nstart_log_capture(mode: \"app\")\n\n# Bypass mode logic with explicit predicate:\nstart_log_capture(subsystem: \"com.apple.SwiftUI\")\n```\n\n**4 filter layers:**\n1. **Stream-side noise exclusion** — 15 known noise processes + subsystem/category exclusions removed before buffering. Server-side filtering in `logd` — 79% I/O reduction.\n2. **3 capture modes** — `smart` (default, broad stream for topic filtering), `app` (tight, auto-detected bundle ID + process name), `verbose` (unfiltered).\n3. **Read-time topic filtering** — `read_logs` categorizes every buffered line into 8 topics (app, crashes, network, lifecycle, springboard, widgets, background, system). Default shows only app + crashes. Agent adds topics as needed — stateless per call.\n4. **Buffer deduplication** — 60 identical heartbeat lines become 2: the line itself + `... repeated 59x`.\n\n**8 topics with LLM-optimized menu:**\n| Topic | Matches | Use case |\n|---|---|---|\n| `app` (always on) | subsystem == bundleId OR process == appName | Your app: os_log, print(), NSLog() |\n| `crashes` (always on) | fault-level logs | Crashes from any process |\n| `network` | trustd, nsurlsessiond | SSL/TLS certs, background transfers |\n| `lifecycle` | runningboardd, com.apple.runningboard.* | Jetsam, memory pressure, app kills |\n| `springboard` | SpringBoard | Push notifications, app state |\n| `widgets` | chronod | WidgetKit timeline, refresh budget |\n| `background` | com.apple.xpc.activity.* | BGTaskScheduler, background fetch |\n| `system` | everything else | WARNING: high volume |\n\n### Console (3 tools)\n\n| Tool | Description |\n|---|---|\n| `launch_app_console` | Launch app with stdout/stderr capture |\n| `read_app_console` | Read console output |\n| `stop_app_console` | Stop console capture |\n\n### Git (5 tools)\n\n| Tool | Description |\n|---|---|\n| `git_status` / `git_diff` / `git_log` | Read operations |\n| `git_commit` / `git_branch` | Write operations |\n\n### Visual Regression (2 tools)\n\n| Tool | Description |\n|---|---|\n| `save_visual_baseline` | Save a screenshot as a named baseline |\n| `compare_visual` | Compare current screen against baseline — pixel diff + match score |\n\n### Multi-Device (1 tool)\n\n| Tool | Description |\n|---|---|\n| `multi_device_check` | Run visual checks across multiple simulators (Dark Mode, Landscape, iPad) — returns layout scores |\n\n### Accessibility (1 tool) <img src=\"https://img.shields.io/badge/Pro-blueviolet?style=flat-square\" align=\"center\">\n\n| Tool | Description |\n|---|---|\n| `accessibility_check` | Render screens across Dynamic Type content size categories — detects truncation and layout issues |\n\n### Localization (1 tool) <img src=\"https://img.shields.io/badge/Pro-blueviolet?style=flat-square\" align=\"center\">\n\n| Tool | Description |\n|---|---|\n| `localization_check` | Render screens across languages including RTL (Arabic, Hebrew) — detects layout breaks |\n\n### Automation (2 tools)\n\n| Tool | Description |\n|---|---|\n| `run_plan` | Execute a multi-step UI automation plan server-side — adaptive decisions with 4-tier fallback |\n| `run_plan_decide` | Resume a paused plan with a decision — for clients without MCP sampling |\n\n### Session (1 tool)\n\n| Tool | Description |\n|---|---|\n| `set_defaults` | Set default project, scheme, simulator — avoids repeating params |\n\n## xcresult Parsing — The Killer Feature\n\n### The Problem\n\nEvery Xcode MCP server returns raw `xcodebuild` output. For a test run, that's 500+ lines of noise. AI agents can't reliably extract which tests failed and why.\n\n### The Solution\n\nSilbercueSwift uses `xcresulttool` to parse the `.xcresult` bundle — the same structured data Xcode's Test Navigator uses.\n\n```\n# One call, structured result\ntest_sim(project: \"MyApp.xcodeproj\", scheme: \"MyApp\")\n\n→ Tests FAILED in 15.2s\n  12 total, 10 passed, 2 FAILED\n  FAIL: Login shows error message\n    LoginTests.swift:47: XCTAssertTrue failed\n  FAIL: Profile image loads\n    ProfileTests.swift:112: Expected non-nil value\n\n  Failure screenshots (2):\n    /tmp/ss-attachments/LoginTests_failure.png\n    /tmp/ss-attachments/ProfileTests_failure.png\n\n  Device: iPhone 16 Pro (18.2)\n  xcresult: /tmp/ss-test-1774607917.xcresult\n```\n\nThe agent gets:\n- **Pass/fail counts** — immediate overview\n- **Failure messages with file:line** — actionable\n- **Failure screenshots** — visual context (Claude is multimodal)\n- **xcresult path** — reusable for `test_failures` or `test_coverage`\n\n### Deep Failure Analysis\n\n```\ntest_failures(xcresult_path: \"/tmp/ss-test-*.xcresult\", include_console: true)\n\n→ FAIL: Login shows error message [LoginTests/testErrorMessage()]\n    LoginTests.swift:47: XCTAssertTrue failed\n    Screenshot: /tmp/ss-attachments/LoginTests_failure.png\n    Console:\n      [LoginService] Network timeout after 5.0s\n      [LoginService] Retrying with fallback URL...\n      ✘ Test \"Login shows error message\" failed after 6.2s\n```\n\n### Code Coverage\n\n```\ntest_coverage(project: \"MyApp.xcodeproj\", scheme: \"MyApp\", min_coverage: 80)\n\n→ Overall coverage: 72.3%\n\n  Target: MyApp.app (74.1%)\n      0.0% AnalyticsService.swift\n     45.2% LoginViewModel.swift\n     67.8% ProfileManager.swift\n\n  Target: MyAppTests.xctest (62.0%)\n     ...\n```\n\n## Benchmarks\n\nMeasured on M3 MacBook Pro, iOS 26.4 Simulator. All values are median of 5 runs after 2 warmups.\n\n| Action | iosef | XcodeBuildMCP | Appium-MCP | SS Free | SS Pro |\n|---|---|---|---|---|---|\n| Screenshot | 83ms | 1127ms | 77ms | 316ms | **15ms** |\n| Find element | 50ms | N/A | 76ms | **31ms** | **<1ms** |\n| Tap (coordinates) | 48ms | 235ms | 470ms | **16ms** | **4ms** |\n| Swipe | 262ms | 1284ms | 2685ms | **~250ms** | **~250ms** |\n| View hierarchy | 44ms | 259ms | 938ms | **31ms** | **5ms** |\n| Navigate (1 call) | — | — | — | **~380ms** | **~380ms** |\n| Double tap | — | — | — | **~84ms** | **~60ms** |\n| Drag & drop | — | coords only | — | **~1.3s** | **~1.3s** |\n| Handle alert | — | — | 118ms | **~200ms** | **~200ms** |\n| Handle 3 alerts (batch) | — | — | 3 calls | **~800ms (1 call)** | **~800ms (1 call)** |\n| Scroll to element | — | — | swipe loop | **—** | **Automatic** |\n| Build (clean) | — | 2501ms | — | 3188ms | **1800ms** |\n| Simulator list | 12ms | 567ms | — | **15ms** | **15ms** |\n| Cold start | ~100ms | ~400ms | ~1000ms | **~50ms** | **~50ms** |\n| Binary size | ~5MB | ~4MB | ~200MB | **8.5MB** | **8.5MB** |\n\n## Comparison with other MCP servers\n\nSee [feature comparison table above](#why-silbercueswift) for a detailed breakdown vs [XcodeBuildMCP](https://github.com/getsentry/XcodeBuildMCP), [Appium-MCP](https://github.com/anthropics/appium-mcp), and [iosef](https://github.com/riwsky/iosef). All three are excellent projects that pioneered iOS MCP tooling. SilbercueSwift combines all their feature sets with deeper integration into a single native binary. The only trade-off: SilbercueSwift is iOS-only (no Android, watchOS, tvOS, or visionOS).\n\n## Architecture\n\n```\nSilbercueSwift (8.5MB Swift binary)\n├── MCP SDK (modelcontextprotocol/swift-sdk)\n├── StdioTransport (JSON-RPC)\n└── 58 Tools in 14 Categories\n    Build · Test · Simulator · Screenshot · UI Automation\n    Logs · Console · Visual Regression · Multi-Device\n    Accessibility · Localization · Automation · Git · Session\n```\n\nNo Node.js. No Python. No Appium server. No Selenium. One binary.\n\n## Requirements\n\n- macOS 13+\n- Xcode 15+ (for `xcresulttool` and `simctl`)\n- Swift 6.0+ (for building from source)\n- WebDriverAgent installed on simulator (for UI automation tools)\n\n## License\n\nThe core binary and all 49 free tools are **MIT licensed** — see [LICENSE](LICENSE). Use them however you want, commercially or otherwise.\n\nPro tools (9 additional tools + faster internals) require a [paid license](https://buy.polar.sh/polar_cl_tfgJc6diWXZBODr4AG8nnl1oYPI9rJJCjuoFy0y63lJ). The license validation code (`LicenseManager.swift`) is included in the source for transparency — you can see exactly what it checks and when.\n\n## Contributing\n\nIssues and pull requests welcome. See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.\n\n## Privacy\n\nSilbercueSwift runs entirely on your Mac and collects no user data. See [PRIVACY.md](PRIVACY.md) for details.\n\n---\n\nAutomating a browser too? [Public Browser](https://github.com/Silbercue/public-browser) is the same idea for Chrome.\n",
  "bytes": 26052,
  "sha": "e9fbe564fb566b0a732284171cd9c62cd0e5be1ac768b11a472a0727690afd69",
  "repo_slug": "silbercue/silbercueswift",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_silbercue_silbercueswift_a055fcd0/readme"
}