Screen Capture

스크린샷 캡처, 컴포넌트 트리 스냅샷, 네이티브 UI 트리 조회, 시각적 회귀 테스트를 위한 도구입니다.

take_screenshot

디바이스/시뮬레이터 화면을 JPEG 이미지(720p)로 캡처합니다.

Parameters

ParameterTypeRequiredDescription
platform"ios" | "android"Yesandroid: adb 사용. ios: simctl 사용 (시뮬레이터만 지원)
filePathstringNo스크린샷 파일을 저장할 경로

Example

// Request
{ "tool": "take_screenshot", "arguments": { "platform": "ios" } }

Tips

  • base64 JPEG와 좌표 변환을 위한 포인트 크기 메타데이터를 반환합니다.
  • 가능하면 스크린샷보다 assert_text 또는 assert_visible을 사용하세요 — 스크린샷은 비전 토큰을 소모합니다.
  • iOS는 시뮬레이터만 지원하며, 실제 디바이스는 지원하지 않습니다.

take_snapshot

React Native 컴포넌트 트리를 캡처합니다. compact 텍스트로 출력하여 토큰 사용량을 대폭 절감합니다.

Parameters

ParameterTypeRequiredDescription
platform"ios" | "android"No대상 플랫폼
deviceIdstringNo대상 디바이스
maxDepthnumberNo최대 트리 깊이 (1–100). 기본값: 30
interactivebooleanNotrue: 인터랙티브 요소(Touchable, Button, TextInput, Switch 등)만 출력. 토큰 추가 절감

Example

// Request
{ "tool": "take_snapshot", "arguments": { "maxDepth": 10 } }
// Response (compact 텍스트)
- View #app-root uid=RCTView:0
  - View #header
    - Text "Home" uid=header>Text:0
  - TextInput #email-input
  - TouchableOpacity #submit-btn
    - Text "Submit"
// interactive 모드: 인터랙티브 요소만 출력
{ "tool": "take_snapshot", "arguments": { "interactive": true } }
// Response
- TextInput #email-input
- TouchableOpacity #submit-btn

Tips

  • compact 출력: JSON 대비 90% 이상 토큰 절감. 들여쓰기로 계층 구조를 표현합니다.
  • interactive: true를 사용하면 탭/입력 가능한 요소만 표시되어 토큰을 더 줄일 수 있습니다.
  • uid 값을 evaluate_scriptmeasureView(uid)와 함께 사용하면 정확한 좌표를 얻을 수 있습니다.
  • 큰 컴포넌트 트리에서는 maxDepth를 줄여 출력 크기를 제한하세요.

describe_ui

네이티브 UI/접근성 트리를 조회합니다. compact 텍스트로 출력하여 토큰을 절감합니다.

Parameters

ParameterTypeRequiredDescription
platform"ios" | "android"Yes대상 플랫폼
mode"all" | "point"NoiOS: all은 전체 트리를 덤프하고, point는 (x,y) 위치를 조회합니다. Android: 무시됨. 기본값: all
xnumberNoX 좌표(포인트 단위). iOS mode=point에서 필수
ynumberNoY 좌표(포인트 단위). iOS mode=point에서 필수
nestedbooleanNoiOS: 계층적 트리 반환. Android: 무시됨. 기본값: false
deviceIdstringNo디바이스 ID

Example

// Request — iOS point query
{
  "tool": "describe_ui",
  "arguments": { "platform": "ios", "mode": "point", "x": 200, "y": 400 }
}

Tips

  • compact 출력: JSON/XML 대비 78% 이상 토큰 절감. Android는 [clickable], [scrollable], bounds= 등 네이티브 속성을 표시합니다.
  • React Native 요소를 조회할 때는 query_selector를 사용하는 것이 좋습니다.
  • iOS는 idb ui describe-all/describe-point를, Android는 uiautomator dump를 사용합니다.
  • React 트리에 포함되지 않는 네이티브 컴포넌트(예: 네이티브 알림, 시스템 UI)를 검사할 때 유용합니다.

visual_compare

시각적 회귀 테스트를 위해 현재 화면을 베이스라인 PNG와 비교합니다.

Parameters

ParameterTypeRequiredDescription
platform"ios" | "android"Yes대상 플랫폼
baselinestringYes베이스라인 PNG 파일의 절대 경로
selectorstringNo특정 요소를 크롭하기 위한 셀렉터. 생략 시 전체 화면 비교
thresholdnumberNopixelmatch 임계값 (0–1). 기본값: 0.1
updateBaselinebooleanNotrue이면 현재 스크린샷을 새 베이스라인으로 저장 (비교 건너뜀)
saveDiffstringNo차이 이미지 PNG를 저장할 경로
saveCurrentstringNo현재 스크린샷 PNG를 저장할 경로
deviceIdstringNo디바이스 ID

Example

// Create baseline
{
  "tool": "visual_compare",
  "arguments": {
    "platform": "ios",
    "baseline": "/tmp/baselines/home.png",
    "updateBaseline": true
  }
}

// Compare against baseline
{
  "tool": "visual_compare",
  "arguments": {
    "platform": "ios",
    "baseline": "/tmp/baselines/home.png",
    "saveDiff": "/tmp/diffs/home-diff.png",
    "threshold": 0.05
  }
}

// Response
{
  "pass": false,
  "diffRatio": 0.023,
  "diffPixels": 4821,
  "totalPixels": 209664,
  "threshold": 0.05,
  "message": "Visual difference detected: 2.3% of pixels differ"
}

Tips

  • 초기 베이스라인을 생성하려면 updateBaseline: true를 사용하세요.
  • 전체 화면 대신 특정 컴포넌트(예: #header)만 비교하려면 selector를 사용하세요.
  • threshold 값이 낮을수록 더 엄격합니다 (0 = 픽셀 단위 완벽 일치, 1 = 모든 차이 통과).
  • 내부적으로 sharp + pixelmatch를 사용합니다.

비디오 녹화

디바이스/시뮬레이터 화면 녹화를 시작·중지합니다. iOS는 idb, Android는 adb screenrecord를 사용합니다. MCP 서버당 동시에 하나의 녹화만 가능합니다.

start_video_recording

디바이스 화면 녹화를 시작합니다. stop_video_recording을 호출할 때까지 녹화가 계속됩니다.

Parameters

파라미터타입필수설명
platform"ios" | "android"대상 플랫폼
filePathstring녹화 파일을 저장할 호스트 경로. 현재 작업 디렉터리 아래여야 함(예: e2e-artifacts/recording.mp4).
deviceIdstring아니오디바이스 ID. 연결된 디바이스가 하나면 생략 가능.

Example

{
  "tool": "start_video_recording",
  "arguments": {
    "platform": "ios",
    "filePath": "e2e-artifacts/session.mp4"
  }
}

Tips

  • 이미 녹화 중이면 오류를 반환합니다. 먼저 stop_video_recording을 호출하세요.
  • 서버 종료(또는 세션 종료) 시 활성 녹화는 자동으로 중지됩니다.

stop_video_recording

현재 녹화를 중지하고, 시작 시 지정한 경로에 파일을 저장합니다.

Parameters

파라미터타입필수설명
platform"ios" | "android"아니오중지할 플랫폼. 녹화가 하나면 생략 가능.
deviceIdstring아니오디바이스 ID. 단일 디바이스면 생략.

Example

{ "tool": "stop_video_recording", "arguments": { "platform": "ios" } }

Tips

  • 성공 시 저장된 파일 경로를 반환합니다.
  • iOS: idb 사용. Android: adb screenrecord(SIGINT로 중지 후 저장).