Skip to content
Scalekit Docs
Talk to an Engineer Dashboard

Connect AI agents to the Expo MCP server

Vendor MCP
Open markdown

The Expo MCP connector routes your AI agent's tool calls to Expo's own MCP server through Scalekit. Each user signs in to Expo once, and Scalekit stores and refreshes their tokens, so your agent never handles credentials. It comes with 52 tools.

Tools
52
What they doRead · write · destructive
14 · 35 · 314 read35 write3 destructive
Users sign in with
OAuth app
Scalekit's or your own

Setup

  1. Install the SDK

    Terminal window
    npm install @scalekit-sdk/node dotenv
  2. Set your credentials

    Add your Scalekit credentials to your .env file. Find values in app.scalekit.com > Developers > API Credentials.

    .env
    SCALEKIT_ENVIRONMENT_URL=<your-environment-url>
    SCALEKIT_CLIENT_ID=<your-client-id>
    SCALEKIT_CLIENT_SECRET=<your-client-secret>
  3. Create the Expo MCP connection

    In AgentKit > Connections, create an Expo MCP connection. The name you give it is the connection_name your code passes. See Configure connections.

    Scalekit credentials are available for Expo MCP server, so you don't need to register an OAuth app.

  4. Authorize a user and make your first call

    quickstart.mts
    import { ScalekitClient } from '@scalekit-sdk/node'
    import 'dotenv/config'
    import { createInterface } from 'node:readline/promises'
    const scalekit = new ScalekitClient(
    process.env.SCALEKIT_ENVIRONMENT_URL,
    process.env.SCALEKIT_CLIENT_ID,
    process.env.SCALEKIT_CLIENT_SECRET,
    )
    const actions = scalekit.actions
    const connector = 'expomcp'
    const identifier = 'user_123'
    // Generate an authorization link for the user
    const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
    console.log('Authorize Expo MCP:', link)
    const rl = createInterface({ input: process.stdin, output: process.stdout })
    await rl.question('Press Enter after authorizing...')
    rl.close()
    // Make your first call
    const result = await actions.executeTool({
    connector,
    identifier,
    toolName: 'expomcp_build_list',
    toolInput: {},
    })
    console.log(result)
    Terminal window
    npx tsx quickstart.mts

    Each user signs in once. See Authorize a user for the full flow and statuses.

Tools

Pass the exact name to execute_tool
Try in PlaygroundRequest a tool
  • expomcp_appstore_reviewsFetch public App Store customer reviews for an app including rating, title, body, reviewer, and territory.Read-only

    Get App Store Reviews

    Fetch public App Store customer reviews for an app including rating, title, body, reviewer, and territory. For TestFlight beta feedback use testflight_feedback instead.

    Inputs

    bundleIdstringrequired
    The bundle ID of the app e.g. com.example.myapp
    cursorstring
    Pagination cursor from a previous response
    limitinteger
    Maximum number of reviews to return (default: 20, max: 100)
  • expomcp_build_infoFetches detailed information about a specific EAS build by ID including status, platform, artifacts, and logs URL.Read-only

    Get Build Info

    Fetches detailed information about a specific EAS build by ID including status, platform, artifacts, and logs URL.

    Inputs

    buildIdstringrequired
    The ID of the build to fetch details for
  • expomcp_build_listLists recent EAS builds for a project.Read-only

    List EAS Builds

    Lists recent EAS builds for a project. Provide either appId (from app.json extra.eas.projectId) or appFullName (e.g. @owner/my-app).

    Inputs

    appFullNamestring
    The full name of the app (e.g., "@owner/my-app"). Provide appId or appFullName.
    appIdstring
    The Expo project/app ID (UUID), from app.json at "extra.eas.projectId". Provide appId or appFullName. If both are provided, they must refer to the same project.
    limitnumber
    Maximum number of builds to return (default: 10)
    platformstring
    Filter builds by platform (ANDROID or IOS)one of ANDROIDIOS
    statusstring
    Filter builds by status (IN_QUEUE, IN_PROGRESS, FINISHED, ERRORED, CANCELED)one of CANCELEDERROREDFINISHEDIN_PROGRESSIN_QUEUENEWPENDING_CANCEL
  • expomcp_build_logsFetches the build logs for a specific EAS build.Read-only

    Get Build Logs

    Fetches the build logs for a specific EAS build. Returns log output to help debug build failures.

    Inputs

    buildIdstringrequired
    The ID of the build to fetch logs for
  • expomcp_playstore_crashesFetch crash and ANR data from Google Play (Android Vitals).Read-only

    Get Google Play Crashes

    Fetch crash and ANR data from Google Play (Android Vitals). Without issueId, lists recent crash/ANR issues. With issueId, returns the full error report with stack trace.

    Inputs

    packageNamestringrequired
    The Android package name of the app e.g. com.example.myapp
    cursorstring
    Pagination cursor from a previous response
    issueIdstring
    Specific error issue ID to fetch the full report for. If omitted, lists recent issues.
    limitinteger
    Maximum number of issues to list (default: 20, max: 100, ignored when issueId is provided)
  • expomcp_playstore_reviewsFetch user reviews from Google Play including author, star rating, device info, and comment text.Read-only

    Get Google Play Reviews

    Fetch user reviews from Google Play including author, star rating, device info, and comment text. Note: Google Play only exposes production reviews with text from approximately the last week.

    Inputs

    packageNamestringrequired
    The Android package name of the app e.g. com.example.myapp
    cursorstring
    Pagination cursor from a previous response
    limitinteger
    Maximum number of reviews to return (default: 20, max: 100)
  • expomcp_read_documentationFetch a single Expo documentation page and return its content as markdown.Read-only

    Read Expo Documentation Page

    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.

    Inputs

    urlstringrequired
    No description.
    offsetinteger
    Character offset to start reading from. Defaults to 0.
  • expomcp_search_documentationSearch the official Expo documentation and return page URLs ranked by relevance for a user query.Read-only

    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.

    Inputs

    querystringrequired
    No description.