---
modificationDate: April 28, 2026
title: Using Model Context Protocol (MCP) with Expo
description: A guide on integrating Model Context Protocol with Expo projects to enhance AI model capabilities.
---

<AgentInstructions>

## Submitting Feedback

If this page contains errors, outdated information, or gaps that blocked you from completing a task, report it so the docs can be improved:

curl -X POST https://api.expo.dev/v2/feedback/docs-send -H 'Content-Type: application/json' -d '{"url":"/eas/ai/mcp/","feedback":"🤖 Agent feedback: <specific, actionable description>"}'

Only submit when you have something specific and actionable to report.

</AgentInstructions>

# Using Model Context Protocol (MCP) with Expo

A guide on integrating Model Context Protocol with Expo projects to enhance AI model capabilities.

> For the complete documentation index, see [llms.txt](/llms.txt). Use this file to discover all available pages.

> Expo MCP Server requires an [EAS paid plan](https://expo.dev/pricing).

[Model Context Protocol (MCP)](https://modelcontextprotocol.io/) is a standard protocol that allows AI models to integrate with external data sources, providing enhanced context for more precise responses. It enables AI-assisted tools like agents to understand your development environment more deeply, allowing them to provide better assistance with your codebase.

Expo MCP Server is a remote MCP server hosted by Expo that integrates with popular AI-assisted tools such as Claude Code, Cursor, VS Code, and others, enabling them to interact directly with your Expo projects.

[Introducing Expo MCP Server: for accurate, context-aware AI responses](https://www.youtube.com/watch?v=dp9dpIgDxZQ) — Enhance your AI-assisted tools for building apps with Expo.

## What does Expo MCP Server do?

Expo MCP Server teaches your AI-assisted tools about the Expo SDK and lets them interact with mobile simulators and the React Native DevTools. These are some examples of the tasks Expo MCP Server enhances:

**Learn about developing with Expo.** Your AI-assisted tools can fetch the latest official Expo documentation on demand and use it to reply to prompts like:

-   "How do I use Expo Router?"
-   "Search the Expo docs for implementing deep linking"
-   "Read the Expo Router docs page"
-   "What is Expo CNG?"

**Manage dependencies.** Expo MCP Server guides you toward installing our recommended packages and uses `npx expo install` to install known, compatible versions.

-   "Add SQLite with basic CRUD operations"
-   "Install `expo-camera` and show me how to take photos"
-   "Add `expo-notifications` for push notifications"

**Manage builds and workflows.** Expo MCP Server can trigger and monitor EAS builds, run workflows, and pull crash data from TestFlight:

-   "Investigate why my most recent iOS build on EAS failed"
-   "Identify any patterns in recent failing workflows"
-   "Create a workflow that runs Maestro tests"
-   "Show me recent TestFlight crashes"
-   "Show TestFlight feedback for my app"

**Automate visual verification and testing.** Multimodal AI-assisted tools can screenshot and interact with your running app in a simulator. Expo MCP Server includes local capabilities enabled by adding the `expo-mcp` package to your project's dependencies.

-   "Add a blue circle view and make sure it renders correctly"
-   "Add a button and tap it to verify the interaction works"
-   "Add a counter button that increments on tap and verify the state updates correctly"

Your AI-assisted tools can autonomously write the code, capture screenshots to verify the UI is correct, test interactions, and fix issues they find.

The complete table of [MCP capabilities](/eas/ai/mcp#available-mcp-capabilities) documents the tools and prompts Expo MCP Server provides to AI-assisted tools.

Prerequisites

3 requirements

1.

Expo account with an EAS paid plan

An [EAS paid plan](https://expo.dev/pricing) is required to use Expo MCP Server.

2.

An Expo project on the latest SDK

Create a project with `npx create-expo-app@latest --template default@sdk-55`, or ensure your existing project has the latest `expo` package installed.

3.

An AI-assisted tool with remote MCP support

Claude Code, Cursor, VS Code, or any other tool with remote MCP server support.

## Installation and setup

### Install Expo MCP Server

Expo MCP Server supports integration with various AI-assisted tools. Use the general settings below or expand your specific tool for detailed instructions:

-   **Server type**: Streamable HTTP
-   **URL**: `https://mcp.expo.dev/mcp`
-   **Authentication**: OAuth

Claude Code setup

```sh
claude mcp add --transport http expo-mcp https://mcp.expo.dev/mcp
```

After installation, run `/mcp` in your Claude Code session to authenticate.

Cursor setup

Click the following link to install the MCP server for Cursor:

VS Code setup

1.  Open Command Palette (Cmd ⌘ + Shift + P or Ctrl + Shift + P)
2.  Run **MCP: Add Server**
3.  Select **HTTP**
4.  Enter the server details:
    -   **URL**: `https://mcp.expo.dev/mcp`
    -   **Name**: expo-mcp

Codex setup

```sh
codex mcp add expo-mcp --url https://mcp.expo.dev/mcp
```

The above command adds the MCP server to your Codex configuration file and prompts you to authenticate with your Expo account.

### Authenticate with Expo

After installing the MCP server, you'll need to authenticate using one of two methods:

#### Access token (recommended)

Generate a **Personal access token** from your Expo account and use it during the OAuth flow.

-   To generate an access token, open [Access tokens](https://expo.dev/accounts/%5Baccount%5D/settings/access-tokens) settings page in EAS dashboard.
-   Under **Personal access tokens**, click **Create token**. Copy the token and use it during the OAuth flow.

#### Credentials

Use your Expo account username and password. In this case, the server will generate an access token automatically.

### Set up local capabilities (Recommended)

> Local capabilities are only available in **SDK 54 and later**.

For the full MCP experience with advanced features like taking screenshots from your iOS Simulator, opening DevTools, and automation capabilities, set up a local Expo development server:

```sh
cd /path/to/your-project
npx expo install expo-mcp --dev
npx expo whoami || npx expo login
EXPO_UNSTABLE_MCP_SERVER=1 npx expo start
```

> Whenever you start or stop the development server, you need to **reconnect or restart** your MCP server connection in your AI-assisted tool to ensure the AI-assisted tool gets refreshed capabilities.

## Server capabilities versus local capabilities

Expo MCP Server provides two types of capabilities depending on your setup:

### Server capabilities

Server capabilities are available with just the remote MCP server connection, without needing to set up a local development server. The **search_documentation** tool is an example of a server capability.

### Local capabilities

Local capabilities require a local Expo development server to be running and provide advanced features that interact with your local development environment:

-   **Automation tools**: Take screenshots, tap views, find elements by testID
-   **Development tools**: Open React Native DevTools
-   **Project analysis**: Generate `expo-router` sitemap

These capabilities enable more sophisticated workflows like automated testing, visual verification, and deeper project introspection. To use local capabilities, you will need to follow the [Set up local capabilities](/eas/ai/mcp#set-up-local-capabilities-recommended) section above.

## Available MCP capabilities

> The MCP capabilities are subject to change from the `expo-mcp` package updates or MCP server changes. The following list is a reference and may not be up to date.

### Tools

| Tool | Description | Example Prompt | Availability |
| --- | --- | --- | --- |
| `add_library` | Add an Expo library to the project using expo install and attach usage instructions when available. | "add sqlite and basic CRUD to the app" | Server |
| `search_documentation` | Search the official Expo documentation and return page URLs ranked by relevance for a user query. Use read_documentation to fetch the full content of specific pages, starting from the top. | "search documentation for CNG" | Server |
| `read_documentation` | Fetch a single Expo documentation page and return its content as markdown. Returns up to ~5000 tokens per call. Use offset to paginate through long pages. | "read the Expo Router docs page" | Server |
| `learn` | Learn Expo how-to for a specific topic and remember it for future conversations. Use this to teach the assistant about specific Expo features or workflows. | "learn how to use expo-router" | Server |
| `workflow_create` | Creates a new EAS workflow YAML file for Expo projects or fetches workflow syntax documentation. Use this when users want to create CI/CD workflows in .eas/workflows/ or need to learn EAS workflow syntax. After creating, use workflow_validate to validate the file. | "create a CI/CD workflow for building and deploying" | Server |
| `workflow_info` | Fetches detailed information about a specific EAS workflow run by ID. Use this to check the status, job results, errors, and artifacts of a workflow run. If workflow has multiple jobs, draw them in a diagram to show the dependencies between jobs. | "get the status of the latest workflow run" | Server |
| `workflow_list` | Lists recent EAS workflow runs for a project. Provide either appId (from app.json "extra.eas.projectId") OR appFullName (e.g., "@owner/my-app"). | "list the recent workflow runs" | Server |
| `workflow_logs` | Fetches logs for a specific job in an EAS workflow run. Call without sectionIndex or phase to get a summary of log sections (phase names and line ranges); then call again with sectionIndex or phase to fetch that section. | "show me the logs for the build job in the workflow" | Server |
| `workflow_run` | Triggers an EAS workflow run from a git reference. Provide either appId (from app.json "extra.eas.projectId") OR appFullName (e.g., "@owner/my-app"). The workflow file must exist at the specified git reference. | "run the build-and-deploy workflow" | Server |
| `workflow_cancel` | Cancels a running EAS workflow. Use workflow_info to get the workflow run ID. | "cancel the running workflow" | Server |
| `workflow_validate` | Validates EAS workflow YAML syntax and configuration. Use this after creating a workflow to ensure it is valid. Provide either appId (from app.json "extra.eas.projectId") OR appFullName (e.g., "@owner/my-app"). | "validate my workflow file" | Server |
| `build_list` | Lists EAS builds for a project. Provide either appId (from app.json "extra.eas.projectId") OR appFullName (e.g., "@owner/my-app"). Use this to see recent builds, their status, and available artifacts. | "list the recent builds for this project" | Server |
| `build_info` | Fetches the status and detailed information about a specific EAS build by ID. Use this to check build status, errors, artifacts, and other details. | "get the status of my latest iOS build" | Server |
| `build_logs` | Fetches the logs for a specific EAS build. The build must be completed (finished or errored) to have logs available. | "show me the logs for the failed build" | Server |
| `build_submit` | Submits an EAS build to the app store (Google Play Store for Android, App Store for iOS). The build must be a finished build with the appropriate distribution type. Provide either appId (from app.json "extra.eas.projectId") OR appFullName (e.g., "@owner/my-app"). | "submit the latest build to the App Store" | Server |
| `build_run` | Triggers a new EAS build using a build profile from eas.json. Requires a GitHub repository to be connected to the project. Provide either appId (from app.json "extra.eas.projectId") OR appFullName (e.g., "@owner/my-app"). | "run a production build for iOS" | Server |
| `build_cancel` | Cancels an EAS build that is queued or in progress. Use build_info to check the current status first. | "cancel the build that is currently in progress" | Server |
| `testflight_crashes` | Fetch TestFlight crash data. Without crashId, lists recent crashes. With crashId, returns the full crash log with stack trace. | "show me recent TestFlight crashes" | Server |
| `testflight_feedback` | Fetch screenshot feedback from TestFlight. Returns feedback metadata including device info, user comments, and screenshot URLs. | "show TestFlight feedback for my app" | Server |
| `expo_router_sitemap` | Query 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. | "check the expo-router-sitemap output" | Local (requires `expo-router` library) |
| `open_devtools` | Open the React Native DevTools. | "open devtools" | Local |
| `collect_app_logs` | Collect logs from native device (logcat/syslog) or JavaScript console. | "collect app logs from the iOS simulator" | Local |
| `automation_tap` | Tap on the device at the given coordinates (x, y) or by react-native testID. Provide either (x AND y) or testID. | "tap the screen at x=12, y=22" | Local |
| `automation_take_screenshot` | Take screenshot of the full app or a specific view by react-native testID. Optionally provide testID to screenshot a specific view. | "take a screenshot and verify the blue circle view" | Local |
| `automation_find_view` | Find view and dump its properties. This is useful to verify the view is rendered correctly. | "dump properties for testID 'button-123'" | Local |

### Prompts

If your AI-assisted tool supports [MCP prompts](https://modelcontextprotocol.io/specification/2025-06-18/server/prompts), you may see additional menu options, such as [slash commands in Claude Code](https://code.claude.com/docs/en/mcp):

| Prompt | Description | Availability |
| --- | --- | --- |
| `expo_router_sitemap` | Query the all routes of the current expo-router project using `expo-router-sitemap`. | Local |

## Limitations

The current implementation has the following limitations:

-   Only supports a **single development server** connection at a time
-   iOS support for local capabilities is limited to simulators only (physical devices not yet supported)
-   iOS support for local capabilities is only available on macOS hosts.

## Additional resources

[Model Context Protocol Documentation](https://modelcontextprotocol.io/) — Learn more about the MCP specification and protocol details.
