What people use it for
- Testing your own app on real phones, including flows that cross into other apps, such as a login with a code from a text message.
- A shelf of phones running the same routine every day, each through its own network or proxy.
에이전트 강화
게시자의 자체 명령입니다. PlugMCP 엔드포인트가 아닙니다.
Host a copy with our keys and logs.
npx -y [email protected]Claude Code에는 로컬 명령용 설치 링크가 없습니다. 아래 명령을 복사해 터미널에서 실행합니다.
claude mcp add knifelemon-droidline -- npx -y droidline@0.1.13터미널에서 실행합니다.
{ "mcpServers": { "knifelemon-droidline": { "command": "npx", "args": [ "-y", "[email protected]" ] } }}claude_desktop_config.json
원격 URL인가요, 내 컴퓨터에서 실행하는 명령인가요? 두 설치 방식의 차이
PlugMCP에서 실행
A new server you create. It is not this listing's official endpoint. Use the publisher install when you want their URL and their credentials.
실행게시자 제공
Android automation from code. Test your apps on real phones, script the tasks you repeat, run a shelf of phones, or let an AI agent use one, from Python, Node.js, the CLI, HTTP or Appium clients. No ADB, no USB cable, no root.
Droidline uses only permissions an ordinary app can get, so a few things are out of reach: see What it cannot do.
You need a PC (Windows, macOS or Linux) and an Android phone with Android 9 or later, on the same Wi-Fi for a first try. The installation guide walks through each step with screenshots.
Run the server on your PC. Download the droidline archive for your system from Releases, put droidline on your PATH, and start it. Leave it running.
droidline serve
Install the app on the phone. Download droidline-agent.apk from the same release page and open it. On the app's Setup tab, turn on the accessibility service, the Droidline keyboard, notifications and unrestricted battery use. On Android 13 and later, allow restricted settings for the app first; the app shows where.
Pair them. Run this on the PC and scan the QR code with the app's Pair tab:
droidline pair
No camera? Tap Pair on this Wi-Fi in the app and type the 6-digit code it shows: droidline pair 482913.
Send a command.
droidline launch com.android.settings
droidline touch text "Network & internet"
No phone at hand? droidline-fakephone, included in every release, simulates one with a small demo app. The first-script tutorial builds a complete login script against it.
Every interface talks to droidline serve on localhost:8780 and uses the same command names.
Python (pip install droidline, Python 3.9+)
from droidline import connect
d = connect() # the phone paired with this PC
d.launch("dev.droidline.demo")
if d.exists("text", "Close ad"): # conditions never wait and never fail
d.touch("text", "Close ad")
d.input("id", "email", "knife") # waits up to 10 s for the element
d.touch("text", "Log in")
print(d.get_text("id", "greeting"))
Node.js and TypeScript (npm install droidline, Node.js 18+)
import { connect } from "droidline";
const d = await connect();
await d.launch("dev.droidline.demo");
await d.input("id", "email", "knife");
await d.touch("text", "Log in", { timeout: 15 });
console.log(await d.getText("id", "greeting"));
C# and .NET (dotnet add package Droidline, .NET 8+ or .NET Framework 4.6.2+)
using Droidline;
await using var d = await DroidlineClient.ConnectAsync();
await d.LaunchAsync("dev.droidline.demo");
await d.InputAsync("id", "email", "knife");
await d.TouchAsync("text", "Log in", timeout: 15);
Console.WriteLine(await d.GetTextAsync("id", "greeting"));
Command line (comes with the server)
droidline touch text "Log in"
droidline which text="Log in" id=main_tab --timeout 15
droidline screenshot shot.png
HTTP (any language, any tool)
curl -s -X POST localhost:8780/devices/_/touch \
-H 'content-type: application/json' -d '{"by":"text","value":"Log in"}'
AI agents over MCP (Claude, Cursor, VS Code and others)
{ "mcpServers": { "droidline": { "command": "droidline", "args": ["mcp"] } } }
With Claude Code: claude mcp add droidline -- droidline mcp. In Claude Desktop you can instead open droidline.mcpb from Releases, which carries its own droidline; it is also listed in the MCP Registry as io.github.KnifeLemon/droidline. To give an agent fewer tools, add --tools dump,screenshot,touch or --read-only to the args; see Limit what an agent can use. Other languages can open a TCP socket and send one JSON line per command; see Other languages for Go, Java and PHP.
dump() returns the screen as a tree with text, id and desc for every element. Commands take the field and the value: touch("id", "login"). When an element refuses a click, Droidline taps its parent or the center of its bounds by itself.touch, input and wait wait for their element, 10 seconds by default. Conditions such as exists, checked and which answer at once and never throw for a missing element.NOT_FOUND: Could not find text 'Log in' within 10s. Current screen: com.example / .MainActivity.batch sent with cuts_network keeps running on the phone while it is offline, so airplane mode on, wait, off works as one call. intent opens the Settings page first; the recipes show it step by step.touch({"class": "android.widget.Switch", "row": {"text": "Wi-Fi"}}). find hands back elements you can click and search inside, and wait_idle waits until the screen stops changing.droidline inspect shows the screen and its elements, suggests selectors with code, and records a script while you use the phone. droidline webdriver lets Appium clients and scripts drive your phones. There is also a pytest plugin, leases for sharing phones between scripts, and picture and text matching for screens without elements.The phone always opens the connection, so it needs no open port. Pick the route that fits your network; the phone tries them in order and returns to Wi-Fi when it can.
Past the two-line handshake every line is encrypted with keys only your PC and phone hold (P-256 and AES-256-GCM), so a tunnel or relay only carries ciphertext. The remote connection guides cover each route step by step.
Droidline only uses permissions an ordinary app can get, so some things are out of reach. Better to know before you start:
launch opens the start screen instead.clear_data wipes app data directly.tap with coordinates and color(x, y) there.The full list explains each one.
Requirements: Go 1.26+, Node.js 22, Python 3.9+, and for the app, JDK 17+ with the Android SDK (Android Studio's bundled JDK works).
git clone https://github.com/KnifeLemon/Droidline.git
cd Droidline
go build ./server/cmd/... # droidline, droidline-relay, droidline-fakephone
go test ./spec/ ./server/...
node scripts/gen.mjs --check # SDK methods match spec/commands.json
cd sdk/python && python -m pytest
cd sdk/node && npm ci && npm test
dotnet test sdk/dotnet
cd agent && ./gradlew assembleDebug testDebugUnitTest
scripts/integration.sh runs the server, the simulated phone and both SDK demos together, which is what CI does.
Pull requests are welcome; CONTRIBUTING.md explains how the spec, generator and tests fit together. The most useful contribution right now is a report from a real phone: which brand and Android version, and whether the Settings recipes for force stop, clearing data and the network switches work with its labels. If Droidline saves you some taps, a ⭐ helps other people find it.
Version 0.1. The server, CLI, MCP adapter, relay and both SDKs pass their tests against the phone simulator, and the app passes its unit tests and runs on an Android 13 emulator. Testing across phone brands is the next step. docs/STATUS.md lists exactly what has been verified and how.
Pairing decides who may control a phone, and everything after the handshake is encrypted end to end. Report security problems privately as described in SECURITY.md.
Droidline collects no usage data and sends no telemetry. The server listens on your own machine; the app talks only to the PC it is paired with, and to GitHub once a day to check for a new release. Use Droidline on phones and accounts you own or may automate; the terms say what it is for.
MIT. See LICENSE.
Android automation from code. Test your apps on real phones, script the tasks you repeat, run a shelf of phones, or let an AI agent use one, from Python, Node.js, the CLI, HTTP or Appium clients. No A
{ "mcpServers": { "knifelemon-droidline": { "command": "npx", "args": [ "-y", "[email protected]" ] } }}개요
Android automation from code. Test your apps on real phones, script the tasks you repeat, run a shelf of phones, or let an AI agent use one, from Python, Node.js, the CLI, HTTP or Appium clients. No ADB, no USB cable, no root.
도구
아직 도구 목록이 없습니다. 원격 서버는 첫 상태 확인 후에 도구 목록이 생깁니다.
FAQ
이 페이지에서 Cursor, Claude Desktop, Claude Code 또는 VS Code용 stdio 설정을 복사합니다. PlugMCP 프록시가 아니라 게시자의 설치 방식을 사용합니다.
이 레코드에는 필수 환경 변수가 등록되어 있지 않습니다.
Droidline은(는) stdio를 통해 로컬에서 실행됩니다.
마지막 확인: 2026-10-27. Android automation from code. Test your apps on real phones, script the tasks you repeat, run a shelf of phones, or let an AI agent use one, from Python, Node.js, the CLI, HTTP or Appium clients. No ADB, no USB cable, no root.