Koskamo

mcp-dir Expo MCP

An MCP server that allows AI agents to interact with Expo and EAS projects using natural language. It provides access to up-to-date SDK documentation, manages cloud builds (status, logs, trigger, cancel), handles EAS CI workflows, and retrieves store submission and TestFlight data including crashes and feedback.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

mcp-dir Expo MCP logo, by mcp-dirCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-07Published by mcp-dir
MCP endpoint (Streamable HTTP)
https://api.mcp.ai/p_expo
Vendor documentation

What its tools do

25 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

25 of 25 have a description · 25 of 25 declare behavior hints · 0 of 22 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Check the status of the last EAS build
  • View logs for a failed build
  • List recent crashes from TestFlight
  • Trigger or cancel an EAS workflow run

Source and maintenance

Community listingRegistry 0.1.0
Maintenance checked

Protocol and capabilities

Server
mcp-ai 0.9.410
MCP protocol negotiated in check
2025-11-25
Tools
25 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": true
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

MCP.AI platform v0.9.410 | Adapters: mcp_bridge vunknown. When the user asks about the version (e.g. "qual a versão", "which version"), call the show_version tool. NEW MCPs/tools/integrations (capabilities not already in this toolkit) come from the official mcp.ai catalog: the `marketplace` tool (action=search) finds and runs them. You are not authenticated yet. Call the authenticate tool first — it will give the user a browser link to log in and copy a token. No other tools will work until authenticated.

Tools

25 advertised

expo_add_library
Advertised by the server during the last successful anonymous check.

Add an Expo library to the project using expo install and attach usage instructions when available

expo_add_library input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "projectRoot",
    "libraryName"
  ],
  "properties": {
    "libraryName": {
      "type": "string"
    },
    "projectRoot": {
      "type": "string"
    }
  }
}
expo_add_library annotations
{
  "title": "expo_add_library",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
expo_read_documentation
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

expo_read_documentation input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "url"
  ],
  "properties": {
    "url": {
      "type": "string"
    },
    "offset": {
      "type": "number"
    }
  }
}
expo_read_documentation annotations
{
  "title": "expo_read_documentation",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
expo_search_documentation
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

expo_search_documentation input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "query"
  ],
  "properties": {
    "query": {
      "type": "string"
    }
  }
}
expo_search_documentation annotations
{
  "title": "expo_search_documentation",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
expo_learn
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

expo_learn input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "topic"
  ],
  "properties": {
    "topic": {
      "enum": [
        "expo-router"
      ],
      "type": "string"
    }
  }
}
expo_learn annotations
{
  "title": "expo_learn",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
expo_workflow_create
Advertised by the server during the last successful anonymous check.

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.

expo_workflow_create input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "action"
  ],
  "properties": {
    "action": {
      "enum": [
        "create",
        "learn"
      ],
      "type": "string"
    },
    "fileName": {
      "type": "string"
    },
    "projectRoot": {
      "type": "string"
    },
    "workflowYaml": {
      "type": "string"
    }
  }
}
expo_workflow_create annotations
{
  "title": "expo_workflow_create",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
expo_workflow_info
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

expo_workflow_info input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "workflowRunId"
  ],
  "properties": {
    "workflowRunId": {
      "type": "string"
    }
  }
}
expo_workflow_info annotations
{
  "title": "expo_workflow_info",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
expo_workflow_list
Advertised by the server during the last successful anonymous check.
Advertised read-only

Lists recent EAS workflow runs for a project. Provide either appId (from app.json "extra.eas.projectId") OR appFullName (e.g., "@owner/my-app").

expo_workflow_list input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "appId": {
      "type": "string"
    },
    "limit": {
      "type": "number"
    },
    "status": {
      "enum": [
        "ACTION_REQUIRED",
        "CANCELED",
        "FAILURE",
        "IN_PROGRESS",
        "NEW",
        "SUCCESS"
      ],
      "type": "string"
    },
    "appFullName": {
      "type": "string"
    }
  }
}
expo_workflow_list annotations
{
  "title": "expo_workflow_list",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
expo_workflow_logs
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

expo_workflow_logs input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "workflowRunId",
    "jobKey"
  ],
  "properties": {
    "phase": {
      "type": "string"
    },
    "jobKey": {
      "type": "string"
    },
    "sectionIndex": {
      "type": "number"
    },
    "workflowRunId": {
      "type": "string"
    }
  }
}
expo_workflow_logs annotations
{
  "title": "expo_workflow_logs",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
expo_workflow_run
Advertised by the server during the last successful anonymous check.

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.

expo_workflow_run input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "fileName",
    "gitRef"
  ],
  "properties": {
    "appId": {
      "type": "string"
    },
    "gitRef": {
      "type": "string"
    },
    "fileName": {
      "type": "string"
    },
    "appFullName": {
      "type": "string"
    }
  }
}
expo_workflow_run annotations
{
  "title": "expo_workflow_run",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
expo_workflow_cancel
Advertised by the server during the last successful anonymous check.

Cancels a running EAS workflow. Use workflow_info to get the workflow run ID.

expo_workflow_cancel input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "workflowRunId"
  ],
  "properties": {
    "workflowRunId": {
      "type": "string"
    }
  }
}
expo_workflow_cancel annotations
{
  "title": "expo_workflow_cancel",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
expo_workflow_validate
Advertised by the server during the last successful anonymous check.
Advertised read-only

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").

expo_workflow_validate input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "workflowYaml"
  ],
  "properties": {
    "appId": {
      "type": "string"
    },
    "appFullName": {
      "type": "string"
    },
    "workflowYaml": {
      "type": "string"
    }
  }
}
expo_workflow_validate annotations
{
  "title": "expo_workflow_validate",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
expo_build_list
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

expo_build_list input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "appId": {
      "type": "string"
    },
    "limit": {
      "type": "number"
    },
    "status": {
      "enum": [
        "CANCELED",
        "ERRORED",
        "FINISHED",
        "IN_PROGRESS",
        "IN_QUEUE",
        "NEW",
        "PENDING_CANCEL"
      ],
      "type": "string"
    },
    "platform": {
      "enum": [
        "ANDROID",
        "IOS"
      ],
      "type": "string"
    },
    "appFullName": {
      "type": "string"
    }
  }
}
expo_build_list annotations
{
  "title": "expo_build_list",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
expo_build_info
Advertised by the server during the last successful anonymous check.
Advertised read-only

Fetches the status and detailed information about a specific EAS build by ID. Use this to check build status, errors, artifacts, and other details.

expo_build_info input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "buildId"
  ],
  "properties": {
    "buildId": {
      "type": "string"
    }
  }
}
expo_build_info annotations
{
  "title": "expo_build_info",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
expo_build_logs
Advertised by the server during the last successful anonymous check.
Advertised read-only

Fetches the logs for a specific EAS build. The build must be completed (finished or errored) to have logs available.

expo_build_logs input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "buildId"
  ],
  "properties": {
    "buildId": {
      "type": "string"
    }
  }
}
expo_build_logs annotations
{
  "title": "expo_build_logs",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
expo_build_submit
Advertised by the server during the last successful anonymous check.

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").

expo_build_submit input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "buildId",
    "platform"
  ],
  "properties": {
    "appId": {
      "type": "string"
    },
    "track": {
      "type": "string"
    },
    "buildId": {
      "type": "string"
    },
    "platform": {
      "enum": [
        "ANDROID",
        "IOS"
      ],
      "type": "string"
    },
    "appFullName": {
      "type": "string"
    },
    "ascAppIdentifier": {
      "type": "string"
    }
  }
}
expo_build_submit annotations
{
  "title": "expo_build_submit",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
expo_build_run
Advertised by the server during the last successful anonymous check.

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").

expo_build_run input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "platform",
    "buildProfile",
    "gitRef"
  ],
  "properties": {
    "appId": {
      "type": "string"
    },
    "gitRef": {
      "type": "string"
    },
    "platform": {
      "enum": [
        "ANDROID",
        "IOS"
      ],
      "type": "string"
    },
    "autoSubmit": {
      "type": "boolean"
    },
    "appFullName": {
      "type": "string"
    },
    "buildProfile": {
      "type": "string"
    },
    "baseDirectory": {
      "type": "string"
    },
    "submitProfile": {
      "type": "string"
    }
  }
}
expo_build_run annotations
{
  "title": "expo_build_run",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
expo_build_cancel
Advertised by the server during the last successful anonymous check.

Cancels an EAS build that is queued or in progress. Use build_info to check the current status first.

expo_build_cancel input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "buildId"
  ],
  "properties": {
    "buildId": {
      "type": "string"
    }
  }
}
expo_build_cancel annotations
{
  "title": "expo_build_cancel",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
expo_testflight_crashes
Advertised by the server during the last successful anonymous check.
Advertised read-only

Fetch TestFlight crash data. Without crashId, lists recent crashes. With crashId, returns the full crash log with stack trace.

expo_testflight_crashes input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "bundleId"
  ],
  "properties": {
    "limit": {
      "type": "number"
    },
    "crashId": {
      "type": "string"
    },
    "bundleId": {
      "type": "string"
    }
  }
}
expo_testflight_crashes annotations
{
  "title": "expo_testflight_crashes",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
expo_testflight_feedback
Advertised by the server during the last successful anonymous check.
Advertised read-only

Fetch screenshot feedback from TestFlight. Returns feedback metadata including device info, user comments, and screenshot URLs.

expo_testflight_feedback input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "bundleId"
  ],
  "properties": {
    "limit": {
      "type": "number"
    },
    "bundleId": {
      "type": "string"
    }
  }
}
expo_testflight_feedback annotations
{
  "title": "expo_testflight_feedback",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
show_version
Advertised by the server during the last successful anonymous check.
Advertised read-only

Show the current MCP platform and adapter versions.

show_version input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {}
}
show_version annotations
{
  "title": "Show Version",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
report_bug
Advertised by the server during the last successful anonymous check.

Report a bug, missing feature, or send feedback. Include the conversation array with recent messages for reproduction.

report_bug input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "message"
  ],
  "properties": {
    "context": {
      "type": "string",
      "default": ""
    },
    "message": {
      "type": "string"
    },
    "conversation": {
      "type": "string",
      "default": "[]"
    }
  }
}
report_bug annotations
{
  "title": "Report Bug",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
connect
Advertised by the server during the last successful anonymous check.
Advertised read-only

Returns connection status and URLs. When all providers are connected, returns authenticated:true and empty pending[]. When credentials are missing, returns connect_url for the toolkit and per-install URLs.

connect input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {}
}
connect annotations
{
  "title": "Connection Status",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
toolkit_info
Advertised by the server during the last successful anonymous check.
Advertised read-only

Returns the current toolkit state: installed MCPs, their connection status, the accounts connected to each one, and how many catalog tools each exposes.

toolkit_info input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {}
}
toolkit_info annotations
{
  "title": "Toolkit Info",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
marketplace
Advertised by the server during the last successful anonymous check.
Open-world

The official mcp.ai marketplace — the in-platform catalog of every MCP/tool, AND the way to run them. Covers capability requests like "find an MCP that does X", "consulta um CPF", "is there a tool for Y". Core flow: action=search discovers MCPs by intent → describe returns one MCP's full profile (every tool with its id + params, pricing, auth) so you pick the right tool_id → invoke RUNS that tool. KEY: invoke works even when the MCP is NOT installed — it runs the tool pontualmente (one-off), without adding the MCP to the toolkit and without bloating the tool list. If the MCP needs a credential/login, invoke returns a connect link; if it is paid and the wallet is empty, invoke returns a checkout/top-up link (the user opens it, then you retry). Use install only to make an MCP PERMANENT in the active toolkit (its tools then show up natively in future sessions); prefer invoke for a single/occasional use. list_tools lists what is callable right now. subscribe/cancel handle per-MCP billing; report_bug sends feedback; request_mcp asks us to build a NEW MCP when nothing fits. Search/describe flag installed_in_toolkit vs installed_in_workspace. Writes (install/uninstall/subscribe/cancel and the one-off install behind invoke) require workspace owner/admin. It also carries the mcp.ai PROMPT LIBRARY, which is about ready-made prompt TEXT rather than MCPs: search_prompts finds one, get_prompt returns its full text with {{variables}} filled, and publish_prompt saves a prompt and returns a shareable mcp.ai/p/<slug> link that opens without login.

marketplace input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "limit": {
      "type": "number",
      "default": 10
    },
    "query": {
      "type": "string",
      "default": ""
    },
    "action": {
      "enum": [
        "search",
        "describe",
        "install",
        "uninstall",
        "subscribe",
        "cancel",
        "resume",
        "report_bug",
        "request_mcp",
        "list_tools",
        "invoke",
        "search_prompts",
        "get_prompt",
        "publish_prompt"
      ],
      "type": "string",
      "default": "search"
    },
    "mcp_id": {
      "type": "string",
      "default": ""
    },
    "message": {
      "type": "string",
      "default": ""
    },
    "tool_id": {
      "type": "string",
      "default": ""
    },
    "arguments": {
      "type": "string",
      "default": "{}"
    },
    "immediate": {
      "type": "boolean",
      "default": false
    },
    "tier_slug": {
      "type": "string",
      "default": ""
    },
    "prompt_body": {
      "type": "string",
      "default": ""
    },
    "prompt_slug": {
      "type": "string",
      "default": ""
    },
    "prompt_tool": {
      "type": "string",
      "default": ""
    },
    "prompt_vars": {
      "type": "string",
      "default": "{}"
    },
    "conversation": {
      "type": "string",
      "default": "[]"
    },
    "prompt_title": {
      "type": "string",
      "default": ""
    },
    "request_name": {
      "type": "string",
      "default": ""
    },
    "cancel_reason": {
      "enum": [
        "too_expensive",
        "missing_features",
        "switched_service",
        "unused",
        "customer_service",
        "too_complex",
        "low_quality",
        "other"
      ],
      "type": "string"
    },
    "cancel_comment": {
      "type": "string",
      "default": ""
    },
    "prompt_targets": {
      "type": "array",
      "items": {
        "enum": [
          "claude",
          "chatgpt",
          "cursor",
          "lovable"
        ],
        "type": "string"
      },
      "default": []
    },
    "report_context": {
      "type": "string",
      "default": ""
    },
    "prompt_category": {
      "type": "string",
      "default": ""
    },
    "request_details": {
      "type": "string",
      "default": ""
    },
    "prompt_description": {
      "type": "string",
      "default": ""
    }
  }
}
marketplace annotations
{
  "title": "Marketplace",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
authenticate
Advertised by the server during the last successful anonymous check.

MCP.AI for IDE agents (Cursor, etc.): log in in the browser, copy the access token. Best: add it to this server's config as a header `Authorization: Bearer <token>` for a permanent, non-expiring connection. Or paste it here for a session-only login: call with { token: "<jwt>" } after the user pastes, or with no args to get the link.

authenticate input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "token": {
      "type": "string"
    }
  }
}
authenticate annotations
{
  "title": "Authenticate",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

Not advertised

No resource definitions available.

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
549 ms
95th percentile latency
549 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 549 ms · metadata changed · 25 tool(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http expo-mcp https://api.mcp.ai/p_expo

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add expo-mcp --url https://api.mcp.ai/p_expo

Cursor

Merge this server into .cursor/mcp.json in your project, then enable expo-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "expo-mcp": {
      "url": "https://api.mcp.ai/p_expo"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "expo-mcp": {
      "type": "streamableHttp",
      "url": "https://api.mcp.ai/p_expo",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start expo-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "expo-mcp": {
      "type": "http",
      "url": "https://api.mcp.ai/p_expo"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http expo-mcp https://api.mcp.ai/p_expo

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://api.mcp.ai/p_expo

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "expo-mcp": {
      "serverUrl": "https://api.mcp.ai/p_expo"
    }
  }
}

Let your agent find its tools

Find servers like mcp-dir Expo MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.