문제 해결
React Native MCP 사용 시 자주 발생하는 문제와 해결 방법입니다.
"No app connected" / appConnected: false
get_debugger_status에서 appConnected: false, devices: []가 나오면, 앱이 MCP 서버의 WebSocket(포트 12300)에 연결되지 않은 상태입니다.
동작 구조
- MCP 서버는 12300 포트에서 WebSocket 서버를 엽니다.
- 앱의 런타임이
ws://localhost:12300으로 서버에 접속합니다. - 접속 후 앱이
init메시지를 보내면 서버가 디바이스를 등록하고appConnected가true가 됩니다.
앱이 12300에 한 번도 연결되지 못하면 appConnected: false가 계속됩니다.
원인 1: MCP 서버가 두 개 실행됨 (가장 흔함)
현상: Cursor가 MCP 프로세스 A를 시작하고, 터미널에서 npx @ohah/react-native-mcp-server로 프로세스 B를 추가로 실행한 경우. 포트 12300은 하나의 프로세스만 사용할 수 있어서, 먼저 실행된 쪽만 성공하고 나머지는 EADDRINUSE 에러가 발생합니다.
앱은 12300을 소유한 프로세스(A)에만 연결되지만, Cursor는 다른 프로세스(B)와 stdio로 통신하므로 항상 appConnected: false로 보입니다.
확인:
여러 프로세스가 나오면 이 문제입니다.
해결:
이후 MCP 서버를 한 곳에서만 실행하세요 — Cursor 또는 터미널 중 하나만.
원인 2: 포트 12300 바인드 실패
프로세스가 하나뿐이어도, 이전 프로세스가 완전히 종료되기 전에 새 프로세스가 시작되면 바인드에 실패할 수 있습니다.
확인: MCP 로그에서 WebSocket server listening on ws://localhost:12300이 있는지 확인. 없고 EADDRINUSE만 있다면 리스닝에 실패한 것입니다.
해결: 포트를 정리하고 MCP 서버 또는 Cursor를 재시작하세요.
원인 3: 앱이 localhost로 호스트에 도달 못함
런타임은 ws://localhost:12300을 사용합니다.
해결: Android 에뮬레이터에서는 다음 실행:
원인 4: 앱 번들에 MCP 런타임이 없음
__REACT_NATIVE_MCP__가 존재하지 않으면 런타임이 주입되지 않은 것입니다.
확인: 앱 로그에서 [MCP] runtime loaded, __REACT_NATIVE_MCP__ available 확인.
해결:
babel.config.js에@ohah/react-native-mcp-server/babel-preset이 있는지 확인- Metro 캐시 초기화 후 재빌드:
- 비개발 빌드에서는 Metro를
REACT_NATIVE_MCP_ENABLED=true로 실행
요약 표
tap / 스크린샷이 안 될 때
iOS 시뮬레이터
- idb 필요: idb 설치:
- 확인:
idb list-targets에 시뮬레이터가 표시되어야 합니다 - 시뮬레이터 부팅: 필요 시
xcrun simctl boot <UDID>
Android 에뮬레이터/기기
- adb 필요: Android Studio에 포함, 또는:
- 확인:
adb devices에 디바이스가 표시되어야 합니다 - 포트 포워딩:
adb reverse tcp:12300 tcp:12300
공통 문제
- 좌표가 틀림: 탭이 엉뚱한 곳에 입력되면 좌표계를 확인하세요 (iOS는 points, Android는 dp).
query_selector로 정확한 좌표를 얻을 수 있습니다. - 가로 모드: iOS 가로 모드에서는 tap/swipe 도구에
iosOrientation파라미터를 전달하세요.
Metro 캐시 문제
Babel 설정 변경이나 MCP 패키지 업데이트 후에는 Metro 캐시를 정리하세요:
권장 진단 순서
-
MCP 서버 프로세스가 하나인지 확인
프로세스가 하나만 있어야 합니다. 여러 개면
kill $(lsof -t -i :12300)후 재시작. -
MCP 로그 확인
- 있어야 함:
WebSocket server listening on ws://localhost:12300 - 없어야 함:
EADDRINUSE
- 있어야 함:
-
실행 환경 확인
- iOS 시뮬레이터, Android 에뮬레이터(
adb reverse적용), 또는 개발 빌드 - 실기기는 추가 네트워크 설정 필요
- iOS 시뮬레이터, Android 에뮬레이터(
-
앱 로그 확인
[MCP] runtime loaded, __REACT_NATIVE_MCP__ available— 런타임 주입됨[MCP] Connected to server ws://localhost:12300— 서버에 연결됨
-
연결 테스트
get_debugger_status호출 — devices 목록에 디바이스가 표시되어야 함evaluate_script에() => 1 + 2전달 —3이 반환되면 정상