Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx agentmods add skills/ohah/react-native-mcp/mcp-testingnpx skills add ohah/react-native-mcp --skill mcp-testinggit clone --depth 1 https://github.com/ohah/react-native-mcpWhat it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5 | $0.00072 | $0.03075 |
| Opus 5 | $0.00036 | $0.01537 |
| Sonnet 5 | $0.00014 | $0.00615 |
| Haiku 4.5 | $0.00007 | $0.00308 |
Grade A, and why
mcp-testing scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 2d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 124 lines — stays where its author put it; the contents beside it link to each section on GitHub.
React Native MCP 전체 기능 테스트
데모 앱(examples/demo-app)은 32개 스텝으로 구성되어 있다. 이 32개 스텝을 모두 순서대로 진행하고, 각 스텝의 성공 기준을 만족하면 MCP 서버의 내부 기능(tap, swipe, type_text, query_selector, assert_text, evaluate_script, webview_evaluate_script, list_network_requests 등)을 전부 검증한 것이다. 스크롤은 MCP scroll 도구가 없으므로 swipe(platform, x1, y1, x2, y2)로 한다.
클릭/탭 (필수 흐름): query_selector(또는 take_snapshot)로 요소 찾기 → 반환된 measure(pageX, pageY, width, height)로 좌표 계산 → tap(platform, x, y)으로 idb(iOS)/adb(Android) 네이티브 클릭. JS 쪽 triggerPress가 아닌 실제 터치 주입.
스텝 이동: #step-nav-next(다음), #step-nav-prev(이전)으로 measure → tap.
사전 조건
- Metro:
cd examples/demo-app && npm start(기본 포트 8230) - 앱:
npm run ios또는npm run android(MCP 런타임 주입됨) - MCP 서버 연결 후 앱에서
__REACT_NATIVE_MCP__사용 가능 - iOS: idb 설치·연결. Android: adb 연결.
전체 테스트: 32개 스텝 순서 (모두 진행 필수)
아래 표는 스텝 1부터 32까지 순서대로 진행해야 하는 전체 목록이다. 각 스텝을 완료한 뒤 다음 스텝으로 넘어가고, 32까지 모두 통과하면 MCP 내부 기능 전체 검증이 끝난다.
| Step | 구분 | 검증 요약 | 사용 도구·동작 |
|---|---|---|---|
| 1 | Press | testID 버튼 탭 → Count 1 이상 | query_selector #press-counter-button → measure → tap → assert_text "Count: 1" |
| 2 | Press | testID 없음 버튼 탭 | query_selector :text("testID 없음") → measure → tap → 숫자 증가 확인 |
| 3 | Press | TouchableOpacity·TouchableHighlight·Button·이미지·Icon+Label 각각 탭 | query_selector로 각 버튼 찾아 measure → tap 반복 → 각 카운트 1씩 증가 확인 |
| 4 | Press | 롱프레스 버튼 2개 | query_selector #press-long-press-button, :text("롱프레스 testID없음") → tap(..., duration) 롱프레스 → 카운트 증가 확인 |
| 5 | Input | testID 있는 TextInput에 입력 | type_text(uid input-with-testid, 문자열) → assert_text "입력값: (문자열)" |
| 6 | Input | testID 없는 TextInput에 입력 | query_selector로 placeholder 등으로 TextInput uid 획득 → type_text → "입력값:" 확인 |
| 7 | ScrollView | scroll-view-no-ref 스크롤 후 버튼 탭 | swipe로 스크롤(ScrollView 영역에서 y1>y2) → query_selector #scroll-btn-N → tap → "버튼 N (1)" 확인 |
| 8 | ScrollView | scroll-view-with-ref 스크롤 후 버튼 탭 | swipe로 스크롤 → query_selector #scroll-btn-N → tap → 버튼 숫자 증가 확인 |
| 9 | ScrollView | testID 없는 ScrollView 스크롤 후 버튼 탭 | swipe로 스크롤 → query_selector :text("버튼 10") 등 → tap → 카운트 확인 |
| 10 | FlatList | testID 있는 FlatList 스크롤 후 탭 | swipe로 스크롤 → query_selector #demo-app-flat-list-btn-item-N 또는 :text("탭:") → tap → "탭: 1" 이상 assert_text |
| 11 | FlatList | testID 없는 FlatList 스크롤 후 탭 | swipe로 스크롤 → query_selector :text("클릭:") 등 → tap → 항목 숫자 증가 확인 |
| 12 | WebView | WebView 내부 버튼 클릭 또는 RN 탭 | webview_evaluate_script(webViewId demo-app-webview, script로 document.querySelector("button").click()) 또는 query_selector → tap → "RN 탭 수: 1" 이상 확인 |
| 13 | WebView | 등록 WebView ID·내부 스크립트 실행 | evaluate_script로 getRegisteredWebViewIds → webview_evaluate_script(demo-app-webview-naver, document.title 등) 결과 확인 |
| 14 | WebView | testID 없는 WebView에서 postMessage 수신 확인 | query_selector로 WebView/버튼 영역 measure → tap → assert_text "#postmessage-count"로 "postMessage 수: 1" 이상 확인 |
| 15 | Network | GET /posts/1 요청·응답 | query_selector #network-fetch-get → tap → list_network_requests에서 /posts/1·응답 확인, assert_text "응답: 200" |
| 16 | Network | POST /posts status 201 | query_selector #network-fetch-post → tap → list_network_requests에서 POST·201 확인 |
| 17 | Network | 3건 요청 수집 | query_selector #network-fetch-multiple → tap → list_network_requests에서 users/1, todos/1, comments 3건 확인 |
| 18 | Network | 404 요청 확인 | query_selector #network-fetch-error → tap → list_network_requests 404, assert_text "응답: 404" |
| 19 | Network | XHR GET /albums/1 캡처 | query_selector #network-xhr-get → tap → list_network_requests에서 XHR GET /albums/1 확인 |
| 20 | Gesture | Touchable·Pressable·RNGH 3개 탭 | query_selector gesture-compare-touchable, gesture-compare-pressable, gesture-compare-gh-touchable → tap 각각 → 카운트 1씩 증가 |
| 21 | Gesture | gesture-tap-detector-wrapper 탭 | query_selector #gesture-tap-detector-wrapper → tap → assert_text로 숫자 1 이상 확인 (Gesture.Tap() idb 터치 수신) |
| 22 | Gesture | RNGH Pressable 탭 | query_selector #gesture-gh-pressable → tap → "RNGH TouchableOpacity: 1" 이상 확인 |
| 23 | Gesture | testID 없음 RNGH 탭 | query_selector :text("RNGH 라벨만") → tap → 숫자 증가 확인 |
| 24 | Gesture | Reanimated 트리거 탭 | query_selector #gesture-reanimated-trigger 또는 #gesture-reanimated-box → tap → "눌러보세요" 아래 숫자 1 이상 |
| 25 | Gesture | Reanimated 라벨만 탭 | query_selector :text("눌러보세요 (라벨만)") → tap → 스케일 박스 숫자 증가 |
| 26 | Gesture | Reanimated ScrollView 스크롤 | swipe로 스크롤(해당 영역에서 y1>y2) → "Reanimated 목록 아이템 30" 등 하단 노출·스크롤 가능 확인 |
| 27 | Gesture | Swipeable 행 스와이프 | query_selector "스와이프 to delete 행 1" 등 → measure → swipe 왼쪽 → "삭제" 영역 노출 확인 |
| 28 | Gesture | 드래그(Pan) 완료 카운트 | query_selector #gesture-drag-area → measure → swipe → assert_text #gesture-drag-count "드래그 완료: 1" 이상 |
| 29 | Gesture | Pull to refresh | 화면 상단 근처에서 swipe 아래 방향 → assert_text "새로고침 횟수: 1" 이상 |
| 30 | Gesture | Drawer 열기·닫기 | query_selector #gesture-drawer-open → tap → assert_text "드로워: 열림" → "닫기" 또는 drawer-overlay tap → "닫힘" 확인 |
| 31 | Gesture | Pager 스와이프 | 페이저 영역 measure → 가로 swipe → assert_text 또는 query_selector "현재 페이지: 1/2/3" (pager-status) |
| 32 | Gesture | Bottom sheet 스와이프 | 하단 시트 영역 measure → swipe 위쪽 → assert_text "상태: 열림" 또는 sheet-status 확인 |
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 2d ago First seen · 124 lines · 72 tokens per session scan A 653fc7c602a5
mcp-testing is a skill published in the GitHub repository ohah/react-native-mcp (7 stars, last pushed 5mo ago), licensed MIT. It adds 72 tokens to every session and 3,075 once invoked, about $0.0004 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.
Other skills, from other repositories
ios-qa
Live-device iOS QA for SwiftUI apps. (gstack).
bump-android-version
Use when bumping Maestro's Android compileSdk/targetSdk to a new API level and validating end-to-end against the test-e2e GHA workflow until the test-android job is green.
agent-device-evidence
Records iOS/Android native MP4 evidence for test/repro flows extracted from an Expensify GitHub PR or issue. Use when the user asks to "record the flow for PR.
solopi-ai
通过 SoloPi 的机器可读 CLI 编译和执行 AI 验证计划,管理签名端侧 ExecuTorch 决策模型、持久设备池、无人值守任务、安卓设备、应用、动作、配置、用例步骤与交互录制、回放及性能历史、动态 Agent、批量与重复执行、性能监控、压力测试和证据。适用于需求/AC 到 Result Judge 三态结论、cloud/on-device 决策切换、模型发布门禁,以及 generation 租约的多设备 CI 执行。.
dogfood
Systematically explore and test a mobile app on iOS/Android with agent-device to find bugs, UX issues, and other problems. Use when asked to dogfood, QA, exploratory test, find issues, bug hunt, or test this app on mobile.
argent-test-ui-flow
Autonomously test an app UI (iOS or Android) by running interact-screenshot-verify loops using argent MCP tools. Use when testing UI flows, verifying login works, testing navigation, running end-to-end UI test scenarios, manual QA steps, visible UI changes, or visual behavior.