AppReveal icon

MCP server for native apps

Debug-only framework that gives LLM agents structured access to your iOS, macOS, Android, Flutter, and React Native apps. Like Playwright, but for native -- with direct access to UI, state, navigation, network traffic, and WebView DOM.

iOS
macOS
Android
Flutter
React Native
48 MCP tools

Zero-config MCP server inside your app

One line of code starts a standards-compliant MCP server in your debug build. Agents find it automatically over the local network.

Your App (debug build) External Agent +-- AppReveal framework +-- mDNS browse for _appreveal._tcp +-- MCP Server (Streamable HTTP) <---+-- MCP client (curl, SDK, Claude, ...) +-- mDNS advertisement +-- LLM orchestration +-- Screen / element / state bridges +-- WebView DOM bridge
1

Integrate

Add the library and call AppReveal.start() in your debug build.

2

Advertise

An HTTP server starts on a dynamic port and advertises via mDNS on the LAN.

3

Discover

Any MCP client on the network discovers the service automatically.

4

Control

The agent calls MCP tools to inspect, navigate, and interact with the app.

Structured data, not pixels

Screenshot-based automation is fragile and token-expensive. AppReveal gives agents direct access to what they actually need.

Screenshot-only agents

Guess screen identity from pixels
Tap by fragile coordinates
Can't read app state directly
No access to network traffic
Can't inspect WebView DOM
High token cost per action

With AppReveal

Exact screen identity with confidence scores
Tap by stable element ID or CSS selector
Read login status, cart, flags directly
Full HTTP traffic with timing data
Complete DOM access and interaction
Token-efficient structured responses

Everything an agent needs

From UI inspection to network traffic capture, all through a standardized MCP interface.

Screen identification

Know exactly which screen is active with controller chains, route state, and confidence scoring.

Element inventory

Every visible interactive element with type, label, state, frame, and available actions.

UI interaction

Tap, type, scroll, navigate back, dismiss modals, switch tabs -- all by element ID.

App state

Read login status, user data, cart contents, feature flags, and navigation stack directly.

Network traffic

Every HTTP call with method, URL, status, duration, and response data. Sensitive headers redacted.

WebView DOM

Full DOM inspection and interaction inside WebViews -- click, type, select, evaluate JS.

48 tools across all platforms

Shared tool surface on iOS, macOS, Android, Flutter, and React Native. macOS adds desktop-specific window and menu tools.

UI & Navigation 15

  • list_windows List visible windows with stable IDs
  • get_screen Current screen identity and metadata
  • get_elements Visible interactive elements
  • get_view_tree Full view hierarchy
  • tap_element Tap by element ID
  • tap_point Tap at coordinates
  • type_text Type into a field
  • clear_text Clear a text field
  • scroll Scroll a container
  • scroll_to_element Scroll until visible
  • screenshot Capture as PNG/JPEG
  • select_tab Switch tabs
  • navigate_back Pop navigation
  • dismiss_modal Dismiss modal
  • open_deeplink Open a URL

State & Diagnostics 8

  • get_state App state snapshot
  • get_navigation_stack Current routes and modals
  • get_feature_flags Active feature flags
  • get_network_calls Recent HTTP traffic
  • get_logs Recent app logs
  • get_recent_errors Captured errors
  • launch_context App and device info
  • device_info Hardware, OS, screen, battery

WebView -- DOM Access 14

  • get_webviews List all web views
  • get_dom_tree Full or partial DOM
  • get_dom_interactive Inputs, buttons, links
  • query_dom CSS selector query
  • find_dom_text Find by text content
  • web_click Click DOM element
  • web_type Type into input
  • web_select Select dropdown option
  • web_toggle Toggle checkbox/radio
  • web_scroll_to Scroll to element
  • web_evaluate Run JavaScript
  • web_navigate Navigate to URL
  • web_back Go back
  • web_forward Go forward

macOS Desktop 3

  • get_menu_bar Read app menu hierarchy
  • click_menu_item Invoke menu item by path
  • focus_window Bring window to front

Token-Efficient & Batch 8

  • get_dom_summary Page overview
  • get_dom_text Visible text only
  • get_dom_links All links
  • get_dom_forms All forms with fields
  • get_dom_headings H1-H6 structure
  • get_dom_images All images
  • get_dom_tables Table data
  • batch Execute multiple tools at once

One line to start

Add the dependency, call start, and your app is agent-ready.

iOS
macOS
Android
Flutter
React Native
// Package.swift dependency
.package(url: "https://github.com/UnlikeOtherAI/AppReveal.git", from: "0.5.0")

// In your AppDelegate or @main struct
#if DEBUG
AppReveal.start()
#endif
// Package.swift dependency (same package as iOS)
.package(url: "https://github.com/UnlikeOtherAI/AppReveal.git", from: "0.5.0")

// In your AppDelegate
#if DEBUG
AppReveal.start()
#endif
// build.gradle.kts
debugImplementation("com.appreveal:appreveal")
releaseImplementation("com.appreveal:appreveal-noop")

// In your Application.onCreate()
if (BuildConfig.DEBUG) {
    AppReveal.start(this)
}
# pubspec.yaml
dependencies:
  appreveal:
    path: Flutter/appreveal

// main.dart
void main() {
  WidgetsFlutterBinding.ensureInitialized();
  AppReveal.start();  // no-ops in release
  runApp(AppReveal.wrap(const MyApp()));
}
// Install
npm install react-native-appreveal
cd ios && pod install

// In your App.tsx
import { AppReveal } from 'react-native-appreveal';

if (__DEV__) {
  AppReveal.start();
}

Discover and control from the terminal

A dedicated CLI for discovering AppReveal targets, inspecting tools, and sending MCP requests without hand-written curl.

# Install
npm install -g @unlikeotherai/appreveal

# Discover all targets on the network
appreveal discover

# Filter by platform
appreveal discover --platform ios,macos

# Snapshot a target: screen, elements, launch context
appreveal snapshot com.example.shop

# Find and tap an element across all targets
appreveal tap "login.submit" --all

# Call any MCP tool
appreveal call get_menu_bar --platform macos

Debug-only by design

Zero production footprint. Compile-time guarantees, not runtime checks.

iOS / macOS: #if DEBUG

All framework code is wrapped in compiler directives. Not a single byte ships in release builds.

Android: debugImplementation

Library is a debug dependency only. The no-op stub ensures release builds compile without code changes.

Local network only

The HTTP server binds to the local network interface. Not accessible from the internet.

Header redaction

Authorization, Cookie, and other sensitive headers are automatically redacted in network captures.