expo-mcp (SajidAlee1/expo-mcp) is an MCP server listed on the M8ven Trust Index. It scores 60 out of 100, grade C. It declares 48 tools. No publisher has claimed this listing.
Enables AI assistants to execute Expo and EAS operations including project setup, cloud builds, OTA updates, app submission, and diagnostics.
Caution. Specific findings reduced this grade. They are listed on the page. Grades reflect the full trust pyramid: code, verification depth, and reputation. New projects cap at C until adoption is earned.
How we verified
Verified is a snapshot. Live keeps it current, and builds your track record.
⚡ Connect GitHub → continuous verification on every pushwhy connect →Who stands behind it
SajidAlee1
Source: Glama
Claim it to get a verified publisher badge, a free copy of our full audit findings, and direct contact for any high-priority issues we find. Or connect your repo for our deepest verification, Live Monitored: read-only, revoke anytime. What we access →
Install from
The grade above is for the source repository. Registries can serve a different version, so we mark the ones we were not able to read.
These names and descriptions are the publisher's own, read from the source code. We print them as written. Our assessment is the findings above, not this list.
automation_tapTap on the device at the given coordinates (x, y) or by react-native testID. Provide either (x AND y) or testID.
automation_tap_by_testidTap on the device by React Native testID
automation_take_screenshotTake screenshot of the full app or a specific view by react-native testID. Optionally provide testID to screenshot a specific view.
automation_take_screenshot_by_testidTake screenshot of a specific view by React Native testID
automation_find_viewFind view and dump its properties. This is useful to verify the view is rendered correctly
automation_find_view_by_testidFind a view by React Native testID and dump its properties
eas_build_createTrigger a new EAS cloud build for iOS, Android, or both.
eas_build_listList recent EAS builds with optional filters.
eas_build_statusGet detailed status for a specific EAS build ID.
eas_build_cancelCancel a build that is in-queue or in-progress.
expo_doctorRun expo doctor diagnostics and optionally attempt auto-fixes.
expo_whoamiCheck current Expo account authentication state.
eas_project_infoGet project metadata from EAS (id, slug, owner, and config).
expo_init_projectCreate a new Expo project with a selected template.
expo_install_packagesInstall packages with Expo version compatibility checks for the current SDK.
expo_get_configRead and evaluate app config from app.json/app.config.*
expo_prebuildGenerate ios/android native folders from Expo config and plugins.
eas_submit_iosSubmit an iOS build to App Store Connect/TestFlight.
eas_submit_androidSubmit an Android build to Google Play Console.
eas_update_publishPublish an OTA update to an EAS branch/channel.
eas_update_listList recent published updates with optional branch filtering.
eas_channel_createCreate a new EAS update channel.
expo_docs_listList curated Expo and React Native documentation links.
expo_docs_searchSearch Expo/React Native llms indexes for matching docs lines.
expo_docs_getFetch docs content using curated docId or direct URL.
expo_router_sitemapQuery the all routes of the current expo-router project. This is useful if you were using expo-router and want to know all the routes of the app
open_devtoolsOpen the React Native DevTools
collect_app_logsCollect logs from native device (logcat/syslog) or JavaScript console
automation_swipeSwipe from one coordinate to another on the device
automation_scrollScroll in a specific direction on the device
automation_type_textType text on the device keyboard
automation_press_keyPress a key on the device
ANDROID_HOMEANDROID_SDK_ROOTEXPO_DEV_SERVER_PORTEXPO_DEV_SERVER_URLdev-server-url / : explicit Metro URLEXPO_MCP_SERVER_URLmcp-server-url / : tunnel server URLEXPO_PROJECT_ROOTroot / : Expo project rootEXPO_TOKENfor account/EAS actions in MCP toolsRCT_METRO_PORTWORKSPACE_FOLDER_PATHSTool annotations
16/48 tools have annotations
Add readOnlyHint or destructiveHint annotations to every tool so hosts can warn users before invoking.
All four hints declared on every tool
32/48 tools missing one or more hints — automation_tap (missing: readOnlyHint, destructiveHint, idempotentHint, openWorldHint); automation_tap_by_testid (missing: readOnlyHint, destructiveHint, idempotentHint, openWorldHint); automation_take_screenshot (missing: readOnlyHint, destructiveHint, idempotentHint, openWorldHint), +29 more. OpenAI's directory rejects tools where any of the four hints are missing or non-boolean.
For every tool, set all four hints (readOnlyHint, destructiveHint, idempotentHint, openWorldHint) to explicit true/false values that match the handler’s actual behaviour.
Destructive tools are labelled
2 tools perform destructive updates without destructiveHint — automation_take_screenshot deletes at line 55 (fs.promises.rm(outputPath, { force: true })); automation_take_screenshot_by_testid deletes at line 55 (fs.promises.rm(outputPath, { force: true }))
Add destructiveHint:true to any tool whose handler calls .delete(), .upsert(), .update(), unlink, rm, DELETE, DROP, REPLACE INTO, or any operation that overwrites existing data.
Descriptions match behaviour
2 tools describe read intent but their handlers mutate — automation_take_screenshot (line 55: fs.promises.rm(outputPath, { force: true })); automation_take_screenshot_by_testid (line 55: fs.promises.rm(outputPath, { force: true }))
Rename the tool, rewrite the description, or move the side-effect into a separate clearly-named tool.
Tool inputs are validated
45/48 tool handlers declare input schemas (94%)
Declare an inputSchema with zod/joi/yup on every tool definition.
Tool handlers catch errors
35/48 tool handlers wrap calls in try/catch (73%)
Wrap each tool handler body in try/catch and return a structured error response.
Tool test coverage
Only 0/48 tools referenced in tests (0%)
Write tests that reference each tool by name so every tool has at least one test.
Shell command execution
2 child_process calls — runs shell commands
Prefer library functions over shell-outs. If you must shell out, ensure all inputs are properly escaped.
Tool description accuracy
automation_take_screenshot: description implies read-only but handler writes/deletes/executes; automation_take_screenshot_by_testid: description implies read-only but handler writes/deletes/executes
Update tool descriptions to accurately reflect all capabilities — especially write, delete, or execute operations.
Claim the listing to review these findings one by one and send us a correction where you disagree, straight to the team. Claiming also means we tell you when the grade moves, and reach you first if we find anything urgent.
[](https://m8ven.ai/mcp/sajidalee1/expo-mcp)?variant=verified from the URL.Vetting this one by hand? Tool Check is an MCP that scores other MCPs. Add it once and ask Claude, ChatGPT, or any MCP client to grade a server, surface CVEs, check the publisher, and suggest safer alternatives — before you install.
https://m8ven.ai/api/mcp/tool-check