MCP Server — Coding Agent Knowledge Pack
Scoopd Mobile App MCP Server Knowledge Pack
Skills and role playbooks for the Scoopd Expo React Native app (Android emulator)
sidebutton install scoopd What This Is
Scoopd is a personal food-delivery intelligence app — an Expo / React Native (RN 0.83.4, React 19.2, Expo SDK ~55) mobile app. The repo lives at ~/oss/scoopd, with the mobile workspace at apps/mobile/. It's part of a monorepo with packages/shared and an api/ backend. Issues live in Jira project HOME at aictpo.atlassian.net.
Authentication uses Firebase Auth (@react-native-firebase/auth). Local state uses react-native-mmkv.
How To Run It (Android Emulator)
There is no iOS simulator on this Linux VM — only Android. An emulator is always running.
Environment
| Variable / Path | Value |
|---|---|
| ANDROID_HOME | /opt/android-sdk (NOT in default PATH) |
| adb | /opt/android-sdk/platform-tools/adb |
| emulator | /opt/android-sdk/emulator/emulator |
| Running device | emulator-5554 |
| AVD name | sidebutton |
| Android version | 14 (x86_64) |
| Package id | com.aictpo.scoopd |
| Main activity | com.aictpo.scoopd/.MainActivity |
Confirm the emulator is online before doing anything:
/opt/android-sdk/platform-tools/adb devices -l
Expected: emulator-5554 device product:sdk_gphone64_x86_64 ...
Build & Launch
From ~/oss/scoopd/apps/mobile/:
cd ~/oss/scoopd/apps/mobile
export ANDROID_HOME=/opt/android-sdk
export PATH=$PATH:$ANDROID_HOME/platform-tools:$ANDROID_HOME/emulator:$ANDROID_HOME/cmdline-tools/latest/bin
npx expo run:android > /tmp/scoopd-build.log 2>&1 &
- Do not pass
--device emulator-5554— Expo CLI rejects it withCould not find device with name. Just omit--device; it auto-picks the only connected device. - First clean build: ~15–30 min. Cached rebuild: ~2 min.
- Output APK:
apps/mobile/android/app/build/outputs/apk/debug/app-debug.apk - After build, expo installs the APK on
emulator-5554and launches via dev-client deep linkexp+scoopd://expo-development-client/?url=http://<host-ip>:8081. - Metro bundler runs at
http://localhost:8081. Keep this process alive while testing — closing it stops hot reload. - The "React Native DevTools install failed" Chrome SUID sandbox error in the build log is harmless on this VM — ignore it.
Verify the app launched
/opt/android-sdk/platform-tools/adb shell pidof com.aictpo.scoopd
/opt/android-sdk/platform-tools/adb shell "dumpsys activity activities | /system/bin/grep topResumedActivity"
Expected: nonzero PID, and topResumedActivity=...com.aictpo.scoopd/.MainActivity.
Re-launch / kill / clear
# Kill the app
/opt/android-sdk/platform-tools/adb shell am force-stop com.aictpo.scoopd
# Re-launch fresh (without rebuilding)
/opt/android-sdk/platform-tools/adb shell am start -n com.aictpo.scoopd/.MainActivity
# Clear app data (resets login + MMKV)
/opt/android-sdk/platform-tools/adb shell pm clear com.aictpo.scoopd
How To Drive The Simulator From Claude
Use the mobile-mcp MCP server. All tools require device: "emulator-5554".
| Tool | Purpose |
|---|---|
mcp__mobile-mcp__mobile_list_available_devices | Confirm emulator is online — first call before anything else |
mcp__mobile-mcp__mobile_take_screenshot | Visual inspection — always take a fresh screenshot after any action |
mcp__mobile-mcp__mobile_list_elements_on_screen | Get tappable elements with coordinates (use this instead of guessing pixels) |
mcp__mobile-mcp__mobile_click_on_screen_at_coordinates | Tap at (x,y) — get coords from list_elements |
mcp__mobile-mcp__mobile_type_keys | Type into the focused input — tap the input first to focus it |
mcp__mobile-mcp__mobile_swipe_on_screen | Swipe up/down/left/right for scrolling and gestures |
mcp__mobile-mcp__mobile_press_button | Hardware buttons (BACK, HOME, ENTER, etc.) |
mcp__mobile-mcp__mobile_open_url | Open a deep link (e.g., exp+scoopd://...) |
mcp__mobile-mcp__mobile_save_screenshot | Save a PNG to a path for evidence collection |
Standard interaction loop
mobile_list_available_devices→ confirmemulator-5554 onlinemobile_take_screenshot→ see current statemobile_list_elements_on_screen→ get coordinates of the element you wantmobile_click_on_screen_at_coordinates(ormobile_type_keys) → actmobile_take_screenshot→ verify the result, then loop
Gotchas
- Refs change after every render — never reuse coordinates from a previous screenshot.
- Text inputs need focus first — tap the field, then
mobile_type_keys. Typing without focus is a no-op. - Splash screen — the orange
Ologo appears for ~5–10s after cold launch while the JS bundle initialises. Wait for the Sign In screen before interacting. - Test credentials are NOT in this skill pack — they live in agent memory. Ask the operator if you can't find them.
App Structure (high-level, learned 2026-04-07)
The app launches into a Sign In screen titled "Welcome back to Scoopd" with:
Emailinput (placeholder[email protected])Passwordinput (placeholderEnter your password)Sign Inbutton (black, full-width)Don't have an account? Sign Uplink (orange "Sign Up")
Post-login navigation (to be documented as discovered).
Quick Reference
| Task | Command / Tool |
|---|---|
| Build & install dev client | cd ~/oss/scoopd/apps/mobile && npx expo run:android |
| Reinstall pre-built APK | adb install -r apps/mobile/android/app/build/outputs/apk/debug/app-debug.apk |
| Take screenshot | mcp__mobile-mcp__mobile_take_screenshot(device="emulator-5554") |
| Reset app state | adb shell pm clear com.aictpo.scoopd |
| View JS logs | adb logcat -s ReactNativeJS |
| Verify app foreground | `adb shell "dumpsys activity activities |