# droidsight MCP server

> Drives a real Android device over ADB and provides the agent with real-time screen feedback and accessibility data.

- Repository: https://github.com/edgecasehuman/droidsight
- Page: https://hostedmcp.org/servers/edgecasehuman/droidsight
- Transport: stdio
- Stars: 4
- License: MIT
- Latest version: 1.0.0

## Install

### Claude Code

```sh
claude mcp add --env 'DROIDSIGHT_DEVICE_PIN=<YOUR_DROIDSIGHT_DEVICE_PIN>' droidsight -- npx -y @edgecasehuman/droidsight
```

### Cursor (`~/.cursor/mcp.json`)

```json
{
  "mcpServers": {
    "droidsight": {
      "command": "npx",
      "args": [
        "-y",
        "@edgecasehuman/droidsight"
      ],
      "env": {
        "DROIDSIGHT_DEVICE_PIN": "<YOUR_DROIDSIGHT_DEVICE_PIN>"
      }
    }
  }
}
```

### VS Code (`.vscode/mcp.json`)

```json
{
  "servers": {
    "droidsight": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "@edgecasehuman/droidsight"
      ],
      "env": {
        "DROIDSIGHT_DEVICE_PIN": "<YOUR_DROIDSIGHT_DEVICE_PIN>"
      }
    }
  }
}
```

### VS Code CLI

```sh
code --add-mcp '{"name":"droidsight","type":"stdio","command":"npx","args":["-y","@edgecasehuman/droidsight"],"env":{"DROIDSIGHT_DEVICE_PIN":"<YOUR_DROIDSIGHT_DEVICE_PIN>"}}'
```

### Claude Desktop (`claude_desktop_config.json`)

```json
{
  "mcpServers": {
    "droidsight": {
      "command": "npx",
      "args": [
        "-y",
        "@edgecasehuman/droidsight"
      ],
      "env": {
        "DROIDSIGHT_DEVICE_PIN": "<YOUR_DROIDSIGHT_DEVICE_PIN>"
      }
    }
  }
}
```

### Codex

```sh
codex mcp add droidsight --env 'DROIDSIGHT_DEVICE_PIN=<YOUR_DROIDSIGHT_DEVICE_PIN>' -- npx -y @edgecasehuman/droidsight
```

### Codex config.toml (`~/.codex/config.toml`)

```toml
[mcp_servers.droidsight]
command = "npx"
args = ["-y", "@edgecasehuman/droidsight"]

[mcp_servers.droidsight.env]
DROIDSIGHT_DEVICE_PIN = "<YOUR_DROIDSIGHT_DEVICE_PIN>"
```

### Gemini CLI

```sh
gemini mcp add -s user -e 'DROIDSIGHT_DEVICE_PIN=<YOUR_DROIDSIGHT_DEVICE_PIN>' droidsight npx -- -y @edgecasehuman/droidsight
```

### Gemini settings.json (`~/.gemini/settings.json`)

```json
{
  "mcpServers": {
    "droidsight": {
      "command": "npx",
      "args": [
        "-y",
        "@edgecasehuman/droidsight"
      ],
      "env": {
        "DROIDSIGHT_DEVICE_PIN": "<YOUR_DROIDSIGHT_DEVICE_PIN>"
      }
    }
  }
}
```

## Environment variables

| Name | Required | Secret | Description |
|---|---|---|---|
| `DROIDSIGHT_DEVICE_PIN` | no | yes | Numeric PIN for UI actions that require automatic unlock. |
| `DROIDSIGHT_ADB_PATH` | no | no | Explicit path to the ADB executable. Falls back to ANDROID_SDK_ROOT, ANDROID_HOME, then PATH. |
| `DROIDSIGHT_ALLOW_SHELL` | no | no | Set to 1 to publish the arbitrary shell and macro tools. Grants authority equivalent to broad ADB shell access. |
| `DROIDSIGHT_DEBUG_LOG` | no | no | Path to a persistent debug log. File logging is otherwise disabled. |
| `DROIDSIGHT_DEVICE_SERIAL` | no | no | The only Android target the process may use. Required when ADB reports more than one authorized device; the server refuses to guess. |
| `DROIDSIGHT_EVENTS` | no | no | Set to 1 to start the long-running device event monitor. Requires DROIDSIGHT_DEVICE_SERIAL. |
| `DROIDSIGHT_LOCAL_ROOT` | no | no | Confines host paths used by APK installation and file push/pull. Defaults to the process working directory. |
| `DROIDSIGHT_LOG` | no | no | Tracing filter. Defaults to warn, or debug when a debug log path is set. |
| `DROIDSIGHT_SENTINEL` | no | no | Set to 1 to start the background enforcement loop. It re-applies watched device state on a timer, including unlocking the screen. Off by default. |

## Tools (31)

- `mcp_android_vision_query`
- `mcp_android_vision_stream`
- `mcp_android_get_view_hierarchy`
- `mcp_android_smart_wait`
- `mcp_android_input_act`
- `mcp_android_tap_text`
- `mcp_android_run_flow`
- `mcp_android_record_gesture`
- `mcp_android_play_gesture`
- `mcp_android_app_manage`
- `mcp_android_app_instrumentation`
- `mcp_android_open_url`
- `mcp_android_start_intent`
- `mcp_android_device_control`
- `mcp_android_system_control`
- `mcp_android_network_control`
- `mcp_android_sensor_control`
- `mcp_android_check_health`
- `mcp_android_check_debug_exposure`
- `mcp_android_diagnostic_stream`
- `mcp_android_read_recent_events`
- `mcp_android_log_filter`
- `mcp_android_get_notifications`
- `mcp_android_file_system`
- `mcp_android_forensics_control`
- `mcp_android_start_recording`
- `mcp_android_stop_recording`
- `mcp_android_companion`
- `mcp_android_sentinel_control`
- `mcp_android_run_shell`
- `mcp_android_run_macro`

## FAQ

### What dependencies are required to run droidsight?

The runtime requires only the binary and ADB. It does not require Python, Appium, scrcpy, or ffmpeg.

### How do I handle multiple connected Android devices?

If more than one authorized device is visible, you must set the DROIDSIGHT_DEVICE_SERIAL environment variable to the specific serial number.

### Can the server interact with apps that don't use standard accessibility trees, like games or Flutter apps?

Yes, when the accessibility tree is empty, the server uses OCR and template matching to find targets.
