# ADB MCP Server

MCP Server for Android Debug Bridge (ADB), enabling Claude to interact with Android devices.

## Tools

1. `get-devices`
   * List connected Android devices
   * Optional inputs:
     * `showDetails` (boolean, default: true): Show device details (-l)
   * Returns: List of connected devices with their details

2. `list-packages`
   * List installed packages on the device
   * Optional inputs:
     * `showPath` (boolean, default: false): Show the APK file path (-f)
     * `showDisabled` (boolean, default: false): Show only disabled packages (-d)
     * `showEnabled` (boolean, default: false): Show only enabled packages (-e)
     * `showSystem` (boolean, default: false): Show only system packages (-s)
     * `showThirdParty` (boolean, default: false): Show only third party packages (-3)
     * `showInstaller` (boolean, default: false): Show package installer (-i)
     * `includeUninstalled` (boolean, default: false): Include uninstalled packages (-u)
   * Returns: List of packages based on specified filters

3. `input-text`
   * Input text to the device
   * Required inputs:
     * `text` (string): Text to input
   * Returns: Text input confirmation

4. `install-apk`
   * Install an APK file to the device
   * Required inputs:
     * `apkPath` (string): Path to the APK file
   * Optional inputs:
     * `allowReinstall` (boolean, default: true): Allow reinstalling (-r)
     * `allowTestPackages` (boolean, default: true): Allow test packages (-t)
     * `allowDowngrade` (boolean, default: true): Allow downgrade (-d)
     * `grantPermissions` (boolean, default: false): Grant all permissions (-g)
   * Returns: Installation result

5. `uninstall-apk`
   * Uninstall an application
   * Required inputs:
     * `packageName` (string): Package name to uninstall
   * Optional inputs:
     * `keepData` (boolean, default: false): Keep app data and cache (-k)
   * Returns: Uninstallation result

6. `clear-app-data`
   * Clear application data
   * Required inputs:
     * `packageName` (string): Package name to clear data
   * Returns: Operation result

7. `pull`
   * Pull a file from device
   * Required inputs:
     * `remotePath` (string): Path to file on device
   * Optional inputs:
     * `localPath` (string): Local destination path
   * Returns: File transfer result

8. `push`
   * Push a file to device
   * Required inputs:
     * `localPath` (string): Path to local file
     * `remotePath` (string): Destination path on device
   * Returns: File transfer result

9. `screencap`
   * Take a screenshot
   * Required inputs:
     * `remotePath` (string): Path on device where to save the screenshot (e.g., /sdcard/screenshot.png)
   * Optional inputs:
     * `usePng` (boolean, default: true): Save as PNG (-p)
   * Returns: Screenshot capture result

10. `rm`
    * Remove a file from the Android device
    * Required inputs:
      * `path` (string): Path to the file on device to remove
    * Optional inputs:
      * `force` (boolean, default: false): Force removal (-f)
      * `recursive` (boolean, default: false): Recursive removal (-r)
    * Returns: File removal result

11. `reset-permissions`
    * Reset all permissions for an app
    * Required inputs:
      * `packageName` (string): Target package name
    * Returns: Permission reset result

12. `grant-permission`
    * Grant a specific permission
    * Required inputs:
      * `packageName` (string): Target package name
      * `permission` (string): Permission to grant
    * Returns: Permission grant result

13. `revoke-permission`
    * Revoke a specific permission
    * Required inputs:
      * `packageName` (string): Target package name
      * `permission` (string): Permission to revoke
    * Returns: Permission revocation result

14. `start-activity`
    * Start an activity using am start
    * Optional inputs:
      * `component` (string): Component name
      * `action` (string): Intent action
      * `data` (string): Intent data URI
      * `mimeType` (string): MIME type
      * `category` (string[]): Intent categories
      * `extras` (array): Intent extras
      * `flags` (string[]): Intent flags
      * `waitForLaunch` (boolean, default: false): Wait for launch (-W)
      * `debuggable` (boolean, default: false): Debug mode (-D)
      * `stopApp` (boolean, default: false): Force stop app (-S)
    * Returns: Activity start result

15. `kill-server`
    * Kill the ADB server process
    * No inputs required
    * Returns: Success message or error

16. `start-server`
    * Start the ADB server process
    * No inputs required  
    * Returns: Success message or error

17. `help`
    * Show ADB help information
    * No inputs required
    * Returns: ADB help text

All tools support these device selection parameters:
* `deviceId` (string, optional): Target specific device by ID
* `useUsb` (boolean, default: false): Target USB device (-d)
* `useEmulator` (boolean, default: false): Target emulator (-e)

## Setup

1. Install ADB:
   * Download Android SDK Platform Tools
   * Add ADB to your system PATH
   * Verify installation with `adb version`

2. Enable USB Debugging:
   * On Android device, go to Settings > About phone
   * Tap Build number 7 times to enable Developer options
   * Enable USB debugging in Developer options

### Install the Server

```:shell
# Clone the repository
git clone [repository-url]
cd mcp-server-adb

# Install dependencies
npm install

# Build the project
npm run build
```

### Usage with Claude Desktop

Add the following to your `claude_desktop_config.json`:

```:json
{
  "mcpServers": {
    "adb": {
      "command": "node",
      "args": [
        "-y",
        "/path/to/mcp-server-adb/build/index.js",
        "/path/to/adb"
      ]
    }
  }
}
```

Replace /path/to/adb with the actual path to your ADB executable.

## License

This project is licensed under the MIT License - see the [LICENSE](./LICENSE) file for details.
