Expo MCP Monorepo
Model Context Protocol (MCP) server capabilities for Expo and EAS workflows.
This repository contains:
packages/expo-mcp: MCP tools, prompts, and docs resources for Expo projectspackages/mcp-tunnel: stdio/tunnel proxy layer for local and remote MCP transportexpo-mcp-server.mjs: dynamic launcher for Codex/Claude MCP config
What It Does
The Expo MCP server enables AI assistants to execute Expo and EAS operations:
| Category | Capabilities | | --- | --- | | Project Setup | Initialize projects, install packages, prebuild native folders, inspect config | | Cloud Builds | Create/list/view/cancel EAS builds | | OTA Updates | Publish/list updates and create channels | | App Submission | Submit iOS and Android builds | | Diagnostics | Run expo doctor, check auth, inspect EAS project metadata | | Docs Access | Search/fetch Expo docs and expose docs as MCP resources |
Requirements
- Node.js
18+ - Bun (for local development scripts in this monorepo)
- Expo account
EXPO_TOKENfor account/EAS actions in MCP tools- Create token: expo.dev/settings/access-tokens
Quick Start
bun install
bun run build
MCP Setup
Use the dynamic launcher so manual server start is not required:
{
"mcpServers": {
"expo-mcp-demo": {
"command": "node",
"args": [
"D:/expo-mcp-demo/expo-mcp-server.mjs",
"--root",
"D:/expo-mcp-demo"
],
"env": {
"EXPO_TOKEN": "your_token_here"
}
}
}
}
Optional launcher flags/env:
--root/EXPO_PROJECT_ROOT: Expo project root--dev-server-url/EXPO_DEV_SERVER_URL: explicit Metro URL--mcp-server-url/EXPO_MCP_SERVER_URL: tunnel server URL
Dynamic behavior:
- If dev server URL is omitted, launcher auto-detects local Metro/Expo server.
- If tunnel URL is present, server runs in composite mode (stdio + tunnel).
- Otherwise server runs as stdio MCP only.
Tools
Project Management
expo_init_projectexpo_install_packagesexpo_get_configexpo_prebuild
EAS Build
eas_build_createeas_build_listeas_build_statuseas_build_cancel
EAS Update (OTA)
eas_update_publisheas_update_listeas_channel_create
EAS Submit
eas_submit_ioseas_submit_android
Utilities
expo_doctorexpo_whoamieas_project_info
Docs Tools
expo_docs_listexpo_docs_searchexpo_docs_get
Dev/Automation Tools
open_devtoolscollect_app_logsexpo_router_sitemapautomation_tapautomation_take_screenshotautomation_find_view_by_testidautomation_find_viewautomation_tap_by_testidautomation_take_screenshot_by_testidautomation_swipeautomation_scrollautomation_type_textautomation_press_key
MCP Resources
Docs resources exposed by the server:
expo://docs/llmsexpo://docs/llms-fullexpo://docs/llms-easexpo://docs/llms-sdkexpo://docs/llms-sdk-v53.0.0expo://docs/llms-sdk-v52.0.0expo://docs/llms-sdk-v51.0.0expo://docs/eas-buildexpo://docs/eas-updateexpo://docs/eas-submitexpo://docs/cli-reference
Output Formats
Expo/EAS tools support:
markdown(default)json
Development
Root
bun run build
bun run lint
bun run test
Per package
cd packages/expo-mcp
bun run build
bun run lint
bun run test
bun run typecheck
How To Add a New Tool
- Add tool implementation in
packages/expo-mcp/src/mcp/tools/expo/*.tsor relevant module. - Register tool in
packages/expo-mcp/src/mcp/tools.ts. - If tool needs docs references, update
packages/expo-mcp/src/mcp/tools/expoDocs.ts. - Add/update output schema and error handling through
expo-utils. - Run:
bun run typecheckinpackages/expo-mcpbun run buildinpackages/expo-mcpbun run lint --max-warnings=0in affected package(s)
Dependency Notes
- Runtime CLI execution uses
npx expoandnpx eas-cli. - EAS commands require
EXPO_TOKENand run non-interactive in MCP context. - Transport layer supports both newline JSON and
Content-Lengthframing for MCP compatibility.
Troubleshooting
Authentication required for EAS commands:- Set
EXPO_TOKENin MCP server environment. No dev server found:- Start Metro (
npx expo start) or setEXPO_DEV_SERVER_URL. - MCP startup/handshake issues:
- Ensure launcher points to
expo-mcp-server.mjs. - Rebuild changed packages (
bun run build).
License
MIT











