Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Descripción del creador (original en inglés)
Let an AI agent see and use a real Android phone over Wi-Fi, without ADB or root.
Estos tres nunca se combinan en una sola puntuación: las opiniones, las mediciones y la popularidad son cosas distintas.
Todavía no escribimos un resumen sencillo para este. Abajo están los datos que leímos del registro.
Elige la app de IA que usas y copia la configuración.
¿Qué app usas?
Elige tu app arriba. La recordamos, así que la próxima vez el botón dirá “Instalar en …”.
Descargar el archivo .mcpb del creador
El enlace lleva al archivo del propio creador; no lo alojamos ni lo reempaquetamos. Abre el archivo y Claude Desktop lo instalará.
Ejecuta esto en tu terminal
Tu navegador te pide permiso para abrir la app; luego la app muestra la configuración y te pide confirmar. Los valores de las claves quedan vacíos para que los completes tú.
Tu navegador te pide permiso para abrir la app; luego la app muestra la configuración y te pide confirmar. Los valores de las claves quedan vacíos para que los completes tú.
Este se ejecuta en tu computadora, y ChatGPT solo puede conectarse a servidores en internet. Elige otra app.
Tu elección se guarda en una cookie en este dispositivo; no necesitas cuenta.
Esta configuración se genera a partir de la ficha del creador en el registro. Si el README dice otra cosa, sigue el README.
Se ejecuta en tu computadora; la lista de herramientas aparece en tu app de IA después de instalarlo.
Revisamos información que cualquiera puede ver; no hemos leído el código. Las revisiones que no aplican no se cuentan. · Revisado el 6 nov 2026
El nombre en el registro se verificó con la cuenta de GitHub KnifeLemon, dueña del repo
Todavía no hemos leído este repo en GitHub
Todavía no hemos leído este repo en GitHub
Este se ejecuta en tu computadora; no hay endpoint en internet
Se ejecuta en tu computadora y usa ajustes locales en su lugar
Se ejecuta en tu computadora; solo podemos leer listas de herramientas de endpoints en internet
Comparado con todos los servidores activos de esta categoría en el registro. Las estrellas solo cuentan cuando quien lo publica es dueño del repo.
Superó 1 de 1 revisiones básicas aplicables. No hemos leído el código. Antes de agregar una clave o un token, revisa qué acceso pide el servidor y usa una clave que tenga solo los permisos que necesitas.
El registro no indica ninguna clave obligatoria, aunque algunos servidores te piden iniciar sesión la primera vez que los usas.
Se ejecuta en tu computadora. Tu app de IA lo inicia cuando hace falta, y los datos no pasan por los servidores del creador (a menos que el propio servidor llame a un servicio en línea).
El repo de GitHub cambió por última vez –, y la última versión (0.1.13) llegó al registro hace 3 días.
Las apps compatibles con MCP, como Claude Desktop, Claude Code, Cursor y VS Code. También necesitas MCPB en tu computadora.
En la misma categoría: Spec Driven Development, Remote Desktop Commander, zanadir
Servidores de la misma categoría hechos por otros creadores, ordenados por estrellas.
Cómo leer una tarjeta:★ Estrellas de GitHubiTres pilares: reseñas · revisiones · usoiActualizado = fecha en que se publicó la última versión en el registroi
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Find what a repository's CI is missing, and which security checks cannot fail the build.
Copiado tal cual del repo del creador. PopNx MCP no lo ha revisado ni lo respalda. Se quitaron HTML, imágenes y scripts. Los enlaces llevan fuera de este sitio.
Automate real Android phones from your code.
Test your apps, script the tasks you repeat, run a shelf of phones, or let an AI agent use one.
Python, Node.js, the shell or HTTP. No ADB, no USB cable, no root.
Website · Docs · Download · Sponsor · Quick start · Languages · Guides
English · 한국어 · 简体中文
No ADB, no cable Install one app on the phone, turn on its permissions and pair it with a QR code. No developer options, no USB debugging, no root. The same command everywhere touch is touch in Python, Node.js, the CLI, HTTP and as an MCP tool, all generated from one spec. Phones anywhere The phone connects out to your PC, so it works on the same Wi-Fi or on mobile data through a tunnel or a relay you run. Every line is encrypted end to end.
Droidline uses only permissions an ordinary app can get, so a few things are out of reach: see What it cannot do.
Try the same demo in your browser, and pick elements on a simulated screen, on droidline.dev
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.
droidline archive for your system from Releases, put droidline on your PATH, and start it. Leave it running. droidline serve
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. droidline pair
No camera? Tap Pair on this Wi-Fi in the app and type the 6-digit code it shows: droidline pair 482913.
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.Setup: each permission with a button to its settings screen Pair: scan the QR code or use a 6-digit code Status: connection, route and permissions
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.
| Route | You need | How it works |
|---|---|---|
| Same Wi-Fi | Nothing | The phone finds the PC with a UDP broadcast and connects directly. |
| Port forward | One forwarded port | The phone connects to your public address over TLS, pinned to the PC's certificate. |
| Tunnel | cloudflared, ngrok or similar | Your PC keeps a tunnel open; the phone reaches it through the tunnel's address. |
| Your relay | Cloudflare Workers or a VPS | PC and phone both connect out to a relay you deploy. It forwards lines it cannot read. |
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.Solo se muestra el principio; lee el resto en el repo