MCP Agent Skill — scoopd
Scoopd Mobile App Skill for MCP Agent
Skills and role playbooks for the Scoopd Expo React Native app (Android emulator)
sidebutton install scoopd 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 |