S

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)

Available free v0.1.1
$ sidebutton install scoopd
Download ZIP
README 5.9 KB

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 / PathValue
ANDROID_HOME/opt/android-sdk (NOT in default PATH)
adb/opt/android-sdk/platform-tools/adb
emulator/opt/android-sdk/emulator/emulator
Running deviceemulator-5554
AVD namesidebutton
Android version14 (x86_64)
Package idcom.aictpo.scoopd
Main activitycom.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 with Could 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-5554 and launches via dev-client deep link exp+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".

ToolPurpose
mcp__mobile-mcp__mobile_list_available_devicesConfirm emulator is online — first call before anything else
mcp__mobile-mcp__mobile_take_screenshotVisual inspection — always take a fresh screenshot after any action
mcp__mobile-mcp__mobile_list_elements_on_screenGet tappable elements with coordinates (use this instead of guessing pixels)
mcp__mobile-mcp__mobile_click_on_screen_at_coordinatesTap at (x,y) — get coords from list_elements
mcp__mobile-mcp__mobile_type_keysType into the focused input — tap the input first to focus it
mcp__mobile-mcp__mobile_swipe_on_screenSwipe up/down/left/right for scrolling and gestures
mcp__mobile-mcp__mobile_press_buttonHardware buttons (BACK, HOME, ENTER, etc.)
mcp__mobile-mcp__mobile_open_urlOpen a deep link (e.g., exp+scoopd://...)
mcp__mobile-mcp__mobile_save_screenshotSave a PNG to a path for evidence collection

Standard interaction loop

  1. mobile_list_available_devices → confirm emulator-5554 online
  2. mobile_take_screenshot → see current state
  3. mobile_list_elements_on_screen → get coordinates of the element you want
  4. mobile_click_on_screen_at_coordinates (or mobile_type_keys) → act
  5. mobile_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 O logo 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:

  • Email input (placeholder [email protected])
  • Password input (placeholder Enter your password)
  • Sign In button (black, full-width)
  • Don't have an account? Sign Up link (orange "Sign Up")

Post-login navigation (to be documented as discovered).

Quick Reference

TaskCommand / Tool
Build & install dev clientcd ~/oss/scoopd/apps/mobile && npx expo run:android
Reinstall pre-built APKadb install -r apps/mobile/android/app/build/outputs/apk/debug/app-debug.apk
Take screenshotmcp__mobile-mcp__mobile_take_screenshot(device="emulator-5554")
Reset app stateadb shell pm clear com.aictpo.scoopd
View JS logsadb logcat -s ReactNativeJS
Verify app foreground`adb shell "dumpsys activity activities

AI Agent Roles