npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@samsadch/adb-mcp

v0.0.3

Published

Model Context Protocol (MCP) server for Android ADB: inspect databases, capture screenshots, manage apps, edit SharedPreferences, and control devices with AI agents in Antigravity, Claude, Cursor, and Windsurf.

Readme

@samsadch/adb-mcp 🤖📱

Model Context Protocol (MCP) server that empowers AI coding agents (Google Antigravity, Claude Code, Cursor, Windsurf, Claude Desktop) to directly see, control, inspect, and debug connected Android devices and emulators over ADB.

Part of ADB Controller by Samsad. Powered by the shared capability layer @samsadch/adb-core.


⚡ Highlights

  • 100% Offline & Private: Direct local ADB bridge communication. Zero telemetry, zero cloud relay.
  • Sticky Target Pinning: Call set_target once; all subsequent tools infer the active device and package.
  • Multimodal Vision: Real-time PNG screen capture for multimodal visual reasoning.
  • Structured UI Automator Inspection: Complete UI hierarchy extraction with bounding box calculations and clickable state resolution.
  • Smart Touch & Gestures: Tap by text, ID, or coordinates; swipe with auto-calculated screen geometry; dispatch hardware keycodes.
  • App Lifecycle & Runtime Permissions: Install APKs, clear caches, restart apps, grant/revoke permissions dynamically.
  • Deep SQLite & SharedPreferences Inspection: Query SQLite databases, browse tables, create tables, truncate, delete rows, and edit SharedPreferences XML with strict data typing.
  • Non-blocking Logcat & Memory Diagnostics: Real-time log capture with PID/tag/severity filters and dumpsys meminfo process allocation breakdowns.
  • Hardware & Power Simulator: Simulated battery levels, discharge states, Doze idle states, UI theme toggles, and broadcast intent injection.
  • File Transfers & Shell Execution: Push/pull files and directories, and execute ad-hoc device shell commands.

🚀 Quick Setup & Usage

1. Claude Code

claude mcp add adb -- npx -y @samsadch/adb-mcp

2. Google Antigravity / Cursor / Windsurf / Claude Desktop

Add to your mcp_config.json or MCP settings:

{
  "mcpServers": {
    "adb": {
      "command": "npx",
      "args": ["-y", "@samsadch/adb-mcp"]
    }
  }
}

3. Android Studio (HTTP transport)

Android Studio's Gemini integration connects only to a streamable HTTP endpoint — it cannot spawn a stdio process. Start the server in HTTP mode:

npx -y @samsadch/adb-mcp --http

Then go to Settings → Tools → AI → MCP Servers, enable MCP servers, and add:

{
  "mcpServers": {
    "adb": {
      "httpUrl": "http://127.0.0.1:3579/mcp"
    }
  }
}

Type /mcp in the Gemini chat to confirm the tools loaded. GET /healthz reports status and the live session count if you need to debug the connection.

The server binds to 127.0.0.1 only. These tools run arbitrary shell commands on the attached device and can read app databases, so exposing the port to a network would hand that control to anyone who can reach it. Binding elsewhere requires an explicit --allow-external, and the server prints a warning when you do.

Options: --port <n> (default 3579), --host <addr> (default 127.0.0.1), --allow-external, --help. The equivalents ADB_MCP_TRANSPORT=http, ADB_MCP_PORT and ADB_MCP_HOST work for clients that only let you set environment variables.

Each HTTP session gets its own server instance, so the sticky target set by one client never leaks into another.

4. Run Locally from Source

git clone https://github.com/samsadch/SamsadADBController.git
cd SamsadADBController
npm install
npm run build --workspace=@samsadch/adb-mcp
node packages/adb-mcp/out/index.js          # stdio
node packages/adb-mcp/out/index.js --http   # streamable HTTP

🛠️ Complete MCP Tool Catalog (51 Tools)

1. Device Discovery & Sticky Target (3 Tools)

| Tool | Description | | :--- | :--- | | list_devices | Lists connected devices and emulators with ID, model, and state. | | set_target | Pins the active device and/or Android package for all subsequent operations. | | get_device_info | Retrieves OS version, SDK level, screen size, density, battery level, and dark mode. |

2. Eyes & Hands: UI Vision & Precision Automation (8 Tools)

| Tool | Description | | :--- | :--- | | take_screenshot | Captures a live screenshot as a multimodal PNG image. | | dump_view_hierarchy | Dumps structured on-screen UI hierarchy JSON with bounding boxes, center coordinates, IDs, and click states. | | tap_element | Finds an on-screen UI element by visible text, resource-id, or content-desc and taps its center. | | tap_coordinates | Performs a touch event at specific (x, y) pixel coordinates. | | input_text | Types text into the active input field with automated character and space escaping. | | press_key | Dispatches hardware/navigation keys (BACK, HOME, RECENTS, ENTER, LOCK, VOLUP, VOLDOWN, TAB, DELETE, etc.) or keycodes. | | swipe_screen | Swipes by direction ("up", "down", "left", "right") or explicit start/end coordinates. | | open_deep_link | Dispatches Android VIEW Intents with URI schemes and App Links. |

3. App Lifecycle & Permission Management (10 Tools)

| Tool | Description | | :--- | :--- | | install_app | Installs an APK from the host machine with permission grant (-g) and reinstall (-r) flags. | | uninstall_app | Uninstalls an application with optional data retention (-k). | | list_packages | Lists installed packages filtered by third_party, system, enabled, disabled, with optional APK paths. | | start_app | Launches main activity or specific Component class, with optional stopFirst cold start. | | stop_app | Force-stops the target application (am force-stop). | | restart_app | Atomically force-stops and re-launches the application. | | clear_app_data | Resets application user data and cache (pm clear). | | grant_permission | Grants runtime permissions (e.g. CAMERA, POST_NOTIFICATIONS, ACCESS_FINE_LOCATION). | | revoke_permission | Revokes granted runtime permissions from the application. | | get_app_info | Inspects package version name, version code, target SDK, min SDK, and requested/granted permissions. |

4. SQLite Database Inspection & Modification (10 Tools)

| Tool | Description | | :--- | :--- | | list_databases | Discovers all SQLite database files in /data/data/<pkg>/databases/. | | inspect_database_overview | Generates a complete inventory table of all tables with row counts and column counts. | | list_database_tables | Lists all table names defined inside the specified database. | | get_table_schema | Inspects column names, data types, nullability, default values, and primary keys. | | get_table_data | Browses and paginates table rows with sorting and total row count. | | create_database_table | Creates a new SQLite table with structured column definitions or raw SQL. | | query_database | Executes arbitrary SQL queries (SELECT, INSERT, UPDATE, DELETE, etc.) with JSON results. | | delete_database_row | Deletes specific row(s) matching a WHERE condition (e.g. id = 42). | | clear_database_table | Wipes all records from a table and resets auto-increment sequence counters. | | export_database | Pulls the database file and merged WAL journals to a local host path. |

5. SharedPreferences Management (6 Tools)

| Tool | Description | | :--- | :--- | | list_shared_preferences | Discovers all .xml preference files in /data/data/<pkg>/shared_prefs/. | | read_shared_preferences | Reads all stored key-value pairs with exact data types. | | get_shared_preference | Fetches a single key's value and explicit data type. | | set_shared_preference | Inserts or updates a preference key-value pair (string, int, long, float, boolean, set). | | delete_shared_preference | Removes a specific key from the preference XML file. | | clear_shared_preferences | Resets a preference file to an empty map (<map></map>). |

6. Logs, Performance & System Diagnostics (3 Tools)

| Tool | Description | | :--- | :--- | | get_logcat | Captures non-blocking Logcat buffer with PID filtering, severity thresholds (V, D, I, W, E, F), tag filtering, search queries, and line limits. | | clear_logcat | Clears the circular Logcat buffer on the device. | | get_app_memory | Inspects process memory consumption using dumpsys meminfo (Total PSS/RSS in MB, Java Heap, Native Heap, Graphics, Code, Stack). |

7. Device Controls & Power Simulator (8 Tools)

| Tool | Description | | :--- | :--- | | set_battery_level | Simulates a specific battery level percentage (0-100) and unplugs device power. | | unplug_battery | Simulates disconnecting device from AC/USB charger (sets battery state to discharging). | | reset_battery | Restores battery status to actual physical hardware state. | | force_doze_mode | Forces device into deep Doze mode (idle state) for testing background tasks and battery optimizations. | | exit_doze_mode | Wakes device from Doze mode (unforce). | | toggle_dark_mode | Switches system UI theme between Dark Mode and Light Mode, or sets an explicit mode (light, dark, toggle). | | toggle_animations | Enables or disables system animations (window, transition, and animator scales) or toggles between 1.0x and 0.0x. | | send_broadcast | Sends custom broadcast intent with action, package, component, and typed extras dictionary. |

8. File Transfers & Safe Ad-hoc Shell (3 Tools)

| Tool | Description | | :--- | :--- | | push_file | Transfers a local file or directory from the host machine to the Android device. | | pull_file | Transfers a file or directory from the Android device to the host machine. | | execute_shell_command | Executes an arbitrary ADB shell command on the target device and returns standard output. |


🔧 Environment Configuration

All environment variables are optional. The server automatically discovers SDK paths:

| Variable | Description | | :--- | :--- | | ADB_PATH | Explicit path to the adb binary. | | ANDROID_HOME / ANDROID_SDK_ROOT | Android SDK root directory (platform-tools/adb is derived automatically). | | SQLITE_PATH | Explicit path to host sqlite3 binary for database extraction tools. |


📄 License

MIT © Samsad Chalil Valappil