Skip to main content
Glama
adb-tv-mcp

adb-tv-mcp

by mosesmrima

adb-tv-mcp

An MCP server that lets an AI agent control an Android TV or Android device through ADB.

Overview

adb-tv-mcp is a local server for the Model Context Protocol. The server gives an AI agent a set of tools. The agent uses the tools to control an Android device. The device must be reachable through the Android Debug Bridge (ADB).

The agent can do these tasks:

  • Capture the screen as an image.

  • Send remote-control and D-pad key presses.

  • Start, install, and remove applications.

  • Open a web address.

  • Type text and touch the screen.

  • Transfer files.

  • Read device properties, settings, and logs.

  • Run shell commands.

  • Pair with a device that uses Android 11 wireless debugging.

The server sends each request to the adb program. The server does not modify the device firmware.

Related MCP server: scrcpy-mcp

Demo

Figure 1 shows a status display that the server sent to a TCL C6K television with the adb_open_url tool. The page runs in the television browser.

A status display shown on a TCL C6K television

Features

  • Screen capture. The adb_screenshot tool returns the screen as a PNG image. Vision-capable agents can see the screen and then act.

  • Remote control. The tools send D-pad keys, media keys, and system keys, and also touch and text input.

  • Application control. The tools start, list, install, and remove applications, and open web addresses.

  • Wireless pairing. The adb_pair tool completes the Android 11 pairing sequence.

  • File transfer. The tools copy files to and from the device.

  • Diagnostics. The tools read properties, settings, and logs, and record the screen.

Requirements

  • Node.js version 18 or later.

  • The Android platform-tools package. This package supplies the adb program.

  • An Android device with developer options and debugging turned on.

Installation

  1. Clone the repository:

    git clone https://github.com/mosesmrima/adb-tv-mcp.git
    cd adb-tv-mcp
  2. Install the dependencies:

    npm install
  3. Build the project:

    npm run build

Configuration

Add the server to the configuration file of your MCP client.

To use the published package, run it with npx. You do not need to clone the repository.

{
  "mcpServers": {
    "adb-tv": {
      "command": "npx",
      "args": ["-y", "adb-tv-mcp"],
      "env": { "ADB_PATH": "/path/to/platform-tools/adb" }
    }
  }
}

To use a local build instead, set the command to node and give the absolute path to the built file:

{
  "mcpServers": {
    "adb-tv": {
      "command": "node",
      "args": ["/absolute/path/to/adb-tv-mcp/dist/index.js"],
      "env": { "ADB_PATH": "/path/to/platform-tools/adb" }
    }
  }
}

Set the ADB_PATH variable only if the adb program is not on the PATH of the client process. Restart the client after you change the configuration.

Connect to a device

Android 11 or later (wireless debugging)

  1. On the device, open Developer options.

  2. Select Wireless debugging.

  3. Select Pair device with pairing code. The device shows a 6-digit code and an address in the form host:port.

  4. Tell the agent to run adb_pair with the host, the port, and the code.

  5. Tell the agent to run adb_connect with the host and the connect port. The device shows the connect port on the main Wireless debugging screen.

Note: The pairing port and the connect port are different. The command adb mdns services also finds these endpoints.

USB or earlier Android

  1. Turn on network ADB on the device.

  2. Tell the agent to run adb_connect with the device address and port 5555.

Tools

Tool

Description

adb_devices

Lists the connected devices and their state.

adb_pair

Pairs with a device that uses Android 11 wireless debugging.

adb_connect

Connects to a device endpoint.

adb_disconnect

Disconnects a device, or all devices.

adb_screenshot

Captures the screen and returns a PNG image.

adb_screenrecord

Records the screen and saves the video to a local file.

adb_key

Sends a remote-control or D-pad key.

adb_tap

Touches the screen at a pixel position.

adb_swipe

Swipes from one position to another.

adb_text

Types text into the active field.

adb_launch

Starts an application by package name.

adb_open_url

Opens a web address on the device.

adb_start_intent

Sends an Android intent with am start.

adb_list_apps

Lists installed packages.

adb_current_app

Reports the application in the foreground.

adb_install

Installs an APK file.

adb_uninstall

Removes an application.

adb_push

Copies a file to the device.

adb_pull

Copies a file from the device.

adb_getprop

Reads device properties.

adb_settings

Reads or writes an Android setting.

adb_logcat

Reads recent log lines.

adb_reboot

Restarts the device.

adb_shell

Runs a shell command.

For the adb_key tool, use one of these key names, or a numeric Android key code: UP, DOWN, LEFT, RIGHT, ENTER, BACK, HOME, MENU, POWER, VOLUME_UP, VOLUME_DOWN, MUTE, PLAY_PAUSE, NEXT, PREV, FAST_FORWARD, REWIND, SEARCH, ASSIST, SETTINGS, APP_SWITCH, CHANNEL_UP, CHANNEL_DOWN.

Environment variables

Variable

Description

ADB_PATH

The path to the adb program. The default value is adb on the PATH.

Security

Read this section before you use the server.

  • The server controls real hardware.

  • The adb_shell tool runs any shell command. The adb_reboot and adb_uninstall tools also make changes to the device.

  • Use the server only with devices that you own or that you have permission to control.

  • Do not connect the server to devices on a network that you do not trust.

  • Give the agent only the autonomy that the task needs.

To report a security problem, see SECURITY.md.

How it works

The server calls the adb command-line program with execFile. Each MCP tool is a wrapper around one adb operation. The server exposes the tools over the stdio transport of the MCP SDK.

The adb_screenshot tool reads the output of screencap -p and returns it as an MCP image block. An agent that supports images can see the screen and then choose the next action.

Development

npm run dev     # run from source with tsx
npm run build   # compile TypeScript to dist/
npm start       # run the compiled server

Contributing

See CONTRIBUTING.md for the contribution process and the coding standards.

License

This project uses the MIT License. See LICENSE.

Available Tools

24 tools
adb_connectB

Connect to a device ADB endpoint host:port (wireless-debug 'connect' port).

Inputs: host (required), port (required).

adb_current_appB

Report the foreground app/activity.

Inputs: serial.

adb_devicesB

List connected ADB devices with serial + state.

Inputs: no named parameters.

adb_disconnectC

Disconnect a device (host:port) or all if omitted.

Inputs: host, port.

adb_getpropB

Read device properties (all, or filter by substring).

Inputs: filter, serial.

adb_installB

Install an APK from a local file path onto the device.

Inputs: apk_path (required), serial.

adb_keyA

Press a remote/D-pad key by name (UP DOWN LEFT RIGHT ENTER BACK HOME POWER MENU VOLUME_UP PLAY_PAUSE SEARCH ASSIST ...) or numeric keycode.

Inputs: key (required), serial.

adb_launchC

Launch an app by package name (e.g. com.spotify.tv.android).

Inputs: package (required), serial.

adb_list_appsB

List installed packages; third_party=true for user-installed only.

Inputs: serial, third_party.

adb_logcatB

Dump recent logcat lines (optionally grep-filtered).

Inputs: lines, filter, serial.

adb_open_urlC

Open a URL on the device (cast a webpage/dashboard/game you built to the TV).

Inputs: url (required), serial.

adb_pairB

Pair with an Android 11+ device via Wireless debugging (6-digit code + IP:port from 'Pair device with pairing code').

Inputs: code (required), host (required), port (required).

adb_pullC

Copy a file from the device to local.

Inputs: local (required), remote (required), serial.

adb_pushB

Copy a local file to the device.

Inputs: local (required), remote (required), serial.

adb_rebootC

Reboot the device. mode: normal | recovery | bootloader.

Inputs: mode, serial.

adb_screenrecordB

Record the screen for N seconds, pull it to a local mp4, return the path.

Inputs: serial, seconds, local_path.

adb_screenshotA

Capture the screen as a PNG image so the agent can SEE the device.

Inputs: serial.

adb_settingsC

Get or put an Android setting. namespace = system|secure|global.

Inputs: key (required), action (required), namespace (required), value, +1 more.

adb_shellC

Run a shell command on the device. Use only with devices that you own.

Inputs: command (required), serial.

adb_start_intentA

Fire a generic Android intent via am start (advanced). Pass raw am args, e.g. ['-n','pkg/.Activity'].

Inputs: args (required), serial.

adb_swipeC

Swipe/drag from x1,y1 to x2,y2 over duration ms.

Inputs: x1 (required), x2 (required), y1 (required), y2 (required), +2 more.

adb_tapC

Tap the screen at pixel x,y.

Inputs: x (required), y (required), serial.

adb_textC

Type a string into the focused field.

Inputs: text (required), serial.

adb_uninstallC

Uninstall an app by package name.

Inputs: package (required), serial.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    B3.2/5.0

    Scored across 24 tools

    Disambiguation4/5

    Most tools have clearly distinct purposes (screenshot vs screenrecord vs tap vs swipe are all different actions). The only mild overlap is adb_shell vs adb_start_intent vs adb_open_url, since all involve running commands on the device, but their descriptions clarify distinct use cases. Overall agents can distinguish between them well.

    Naming Consistency4/5

    The adb_ prefix is applied to all 24 tools, giving a strong and clear prefix pattern. However, the verb portion varies in style: verbs like screenshot, reboot, shell, push, pull are nouns/imperatives mixed together, and there's no action-object convention (e.g. adb_launch vs adb_launch_app). The ubiquitous adb_ prefix creates consistency, but the verb style is somewhat inconsistent.

    Tool Count4/5

    24 tools is near the high end of what feels appropriate for a device-management server, and the count is justified by the breadth of ADB capabilities (network, input, apps, screen, properties). Each tool addresses a distinct real operation, making the size defensible, though it does edge toward heavy.

    Completeness4/5

    The surface covers the core ADB workflows well: connectivity (pair/connect/disconnect/devices), input (tap/swipe/key/text), screen (screenshot/record), app lifecycle (launch/install/uninstall/list/current), file transfer (push/pull), properties/settings, shell, logcat, and URL/intent launching. Minor gaps include no clear reboot/couple of state management helper, but the essential ADB operations are present with no dead ends.

    Maintenance

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      B
      quality
      D
      maintenance
      Enables AI assistants to interact with Android devices and emulators via ADB, providing tools for screenshots, UI inspection, touch and text input, app management, and device control.
      42
      204 npm
      21
      MIT
    • A
      license
      Not graded
      quality
      A
      maintenance
      Enables AI agents to visually perceive and directly control Android devices via ADB and screen-control tooling, including screenshots, taps, swipes, typing, app management, UI inspection, file transfer, shell commands, and audio/video streaming.
      374 npm
      MIT
    • A
      license
      Not graded
      quality
      A
      maintenance
      Enables AI agents to see and control Android devices through ADB and scrcpy, supporting screenshots, input, app management, UI automation, shell/file access, and audio/video streaming.
      374 npm
      MIT
    • A
      license
      Not graded
      quality
      A
      maintenance
      Enables AI agents to see and control Android devices through ADB and screen mirroring, supporting screen capture, touch input, app management, UI element finding, file transfer, shell commands, clipboard access, and audio/video streaming.
      374 npm
      MIT