Android Control MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| ANDROID_CONTROL_MODE | No | Operating mode: SAFE, NORMAL, or ADMIN. Determines which tools are permitted. | normal |
| ANDROID_CONTROL_PORT | No | Port to use when ANDROID_CONTROL_TRANSPORT=http. | 8001 |
| ANDROID_CONTROL_CONFIG | No | Path to the configuration file. Defaults to ~/.config/android-control-mcp/config.json. | |
| ANDROID_CONTROL_ADB_PATH | No | Path to the adb executable. If not set, adb is expected to be in PATH. | |
| ANDROID_CONTROL_AUDIT_LOG | No | Optional path to an audit log file. If not set, audit messages are written to stderr. | |
| ANDROID_CONTROL_TRANSPORT | No | Transport protocol: 'stdio' for standard MCP, 'http' for HTTP transport. | stdio |
| ANDROID_CONTROL_AUTO_APPROVE | No | Set to '1' to automatically approve high-risk actions without interactive confirmation. Only for trusted environments. | 0 |
| ANDROID_CONTROL_DEFAULT_SERIAL | No | Default device serial number to use when no serial parameter is provided. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| device_listA | Csatlakoztatott Android eszkozok listaja (USB vagy 'adb connect' wifi). Mutatja minden eszkoz sorozatszamat es allapotat (device/unauthorized/offline). Ha tobb eszkoz van, a tobbi tool 'serial' parameterevel valaszthato ki, melyiken fusson a muvelet. |
| device_infoA | Az eszkoz alap adatai: gyarto, modell, Android verzio, SDK szint, build. Hasznos elso lepes barmilyen automatizalas elott, illetve amikor eldontendo, milyen Android verziora/ROM-ra frissitheto egy regebbi keszulek. |
| battery_statusB | Akkumulator toltottsege, allapota (tolt/lemerul), homerseklete. |
| storage_usageB | Belso tarhely-hasznalat (df /data, /sdcard). |
| screen_stateB | A kepernyo aktualis allapota: be/kikapcsolva, es hogy zarolva van-e. Informativ lekerdezes - NEM alkalmas es NEM is a celja a zarolas megkerulesere; csak megmutatja, mi az aktualis allapot. |
| network_statusB | Halozati allapot: wifi SSID (ha lekerdezheto), IP cim, mobil adat allapota. |
| set_modeA | A szerver engedely-modjanak valtasa futas kozben: 'safe', 'normal' vagy 'admin'. Az inditasi mod (env/config) egy FELSO HATART (max_mode) rogzit - 'set_mode' soha nem tud ennel magasabbra menni, akkor sem, ha kozben mar levittek a modot. Igy egy ADMIN inditasu szerveren SAFE -> NORMAL -> ADMIN oda-vissza szabadon valthato, de egy NORMAL inditasu szerver soha nem er fel ADMIN-ig set_mode-dal
|
| screenshotA | Kepernyokep keszitese az eszkozrol, PNG kepkent visszaadva. Igy a modell szo szerint 'latja' az aktualis kepernyot - hasznos amikor az ui_dump nem eleg (pl. jatek, video, egyedi rajzolt UI, WebView/Canvas tartalom, amit az uiautomator nem lat elemenkent). |
| screen_recordA | Rovid (max 30 mp) kepernyofelvetel keszitese MP4 formatumban. Hasznos animaciok, atmenetek, jatekmenet visszanezesehez. A felvetel az eszkoz ideiglenes tarhelyere kerul, majd letoltodik es torlodik onnan. |
| ui_dumpA | Az aktualis kepernyo UI-elemeinek strukturalt listaja (uiautomator). Minden elemhez megadja: id (a 'tap_element'/'type_into' 'element_id' parameteret ez adja), szoveg, resource-id, osztaly, allapot-jelzok ([C]lickable/[T]ext-mezo/[E]nabled/[S]elected), es a kozeppont koordinatait. Ez a legmegbizhatobb modja annak, hogy a modell tudja, hova koppintson - de meg egyszerubb kozvetlenul a 'tap_element'/ 'find_element' tool-t hasznalni, ami mar el is vegzi a koordinata- szamolast. only_interactive=True eseten csak a kattinthato/szerkesztheto elemeket mutatja (rovidebb, attekinthetobb valasz). |
| ocr_screenA | OCR-alapu szovegfelismeres a kepernyon - fallback, amikor az 'ui_dump' ures listat ad (jatek, WebView, Canvas, egyedi rajzolt UI). Opcionalis fuggoseget igenyel: 'pip install -e ".[ocr]"' a projektben, plusz a Tesseract OCR motor rendszerszintu telepiteset. Ha ezek hianyoznak, vilagos utmutatast ad, mit kell telepiteni - nem hasal el. lang: Tesseract nyelvkod, tobb nyelvhez pl. 'eng+hun'. |
| wait_for_textA | Var, amig egy adott szoveg megjelenik a kepernyon (ui_dump-ot ismetel). Hasznos, hogy az agent ne 'tuti X masodpercet' varjon minden lepes utan, hanem tenylegesen addig probalkozzon, amig a keresett UI elem meg nem jelenik (pl. betoltodik egy oldal), de legfeljebb timeout_seconds-ig. Konkret elemre varashoz (resource-id/osztaly alapjan is) hasznald a 'wait_for_element' tool-t. |
| observe_screenA | Egyetlen hivassal osszegyujti a kepernyo aktualis allapotat. Visszaadja egyben: eloterben lathato alkalmazas/aktivitas, kepernyomeret es -orientacio, es a fontosabb (kattinthato/szerkesztheto) UI-elemek listaja. Ezzel egy agentnek nem kell minden lepes elott 3-4 kulon tool-t hivnia (foreground_app + ui_dump + screen_state) - egy hivasbol latja az aktualis 'jelenetet'. include_screenshot=True eseten a kepernyokep is mellekelve van (kulon uzenetkent, mert a valasz maga szoveges marad). |
| tapA | Koppintas a kepernyo (x, y) pixelkoordinatajan. A koordinatakat legjobb az 'ui_dump' tool 'center=' ertekebol venni, vagy meg jobban a 'tap_element' tool-t hasznalni koordinata-szamolas nelkul, ha van szoveg/resource-id, amire hivatkozni lehet. |
| double_tapB | Dupla koppintas (x, y)-on - pl. kep nagyitasahoz/kicsinyitesehez. |
| long_pressB | Hosszan tartott nyomas (x, y)-on - pl. kontextusmenuhoz vagy elem kijeloleshez. |
| swipeC | Csuszo mozdulat (x1,y1) -> (x2,y2) pontok kozott, duration_ms ideig. |
| dragA | Huzas (drag) (x1,y1)-tol (x2,y2)-ig - hosszabb ideju swipe, hogy az UI drag-nak, ne csak gyors flick-nek erzekelje (pl. listaelem atrendezese). |
| scrollA | Gorgetes a kepernyo kozepetol: 'up', 'down', 'left' vagy 'right'. Ez csak egy kenyelmi wrapper a 'swipe' korul szemantikus iranyokkal - ha egy konkret szoveghez akarsz gorgetni, hasznald a 'scroll_to' tool-t. |
| type_textA | Szoveg begepelese az aktivan fokuszalt beviteli mezobe. Automatikusan valasztja a megfelelo modszert: tiszta ASCII szoveghez az 'input text'-et hasznalja; ekezetes/unicode szoveg eseten (pl. magyar ekezetek) automatikusan a vagolap+beillesztes utat valasztja ('paste_clipboard' + KEYCODE_PASTE), ami megbizhatobb Android 10+-on - nem kell kulon 'paste_clipboard'-ot es hosszu nyomast hivnod kezzel. |
| press_keyA | Hardver-/rendszerbillentyu lenyomasa. Rovidites-nevek: home, back, recents, power, enter, tab, delete, escape, volume_up, volume_down, volume_mute, up/down/left/right, menu, search, play_pause, next, previous, paste. Barmilyen mas 'KEYCODE_...' nev is mukodik kozvetlenul (lasd az Android KeyEvent dokumentaciojat) - a formatumot ellenorizzuk, mielott a shell parancsba kerulne. |
| paste_clipboardA | Szoveg masolasa az eszkoz vagolapjara ('cmd clipboard set-primary-clip'). Ekezetes/unicode szoveghez altalaban egyszerubb kozvetlenul a 'type_text'-et hasznalni - az automatikusan ezt az utat valasztja nem-ASCII szoveghez. Ezt a tool-t akkor erdemes kulon hivni, ha csak masolni akarsz (nem azonnal beilleszteni), vagy tobbszor akarod ugyanazt a szoveget beilleszteni. |
| find_elementA | UI-elemek keresese szoveg/tartalom-leiras, resource-id es/vagy osztaly (reszleges, kis-nagybetu-fuggetlen) alapjan az aktualis kepernyon. Legalabb egy szurot adj meg. Tobb talalat eseten mindegyiket felsorolja 'element_id'-vel egyutt - azt add at a 'tap_element'/'type_into' 'index' parametereben, ha nem az elso (index=0) talalatot akarod. |
| tap_elementA | Koppintas egy UI-elemre szoveg/resource-id/osztaly alapjan (kereses+koppintas egyben - nem kell kulon 'find_element' + 'tap' koordinatakkal). Ha tobb elem is illik a szurore, 'index'-szel valaszthatod ki, melyikre (0 = elso talalat). Hiba eseten a talalatok listajat adja vissza, hogy lasd, mit erdemes pontositani. |
| type_intoB | Szoveg beirasa egy adott mezobe: megkeresi, ra koppint (fokuszalja), majd beirja a szoveget - egy hivasban. 'field_text'/'resource_id'/'class_name' azonositja a CELMEZOT (nem a beirando szoveget - az a 'text' parameter). Ha egyik szurot sem adod meg, az elso szerkesztheto (EditText) mezot celozza. |
| scroll_toA | Lefele gorget, amig a keresett szoveg meg nem jelenik a kepernyon (vagy el nem eri a max_swipes limitet). Hasznos hosszu listakhoz/beallitas-oldalakhoz, ahol a keresett elem eleve nem is lathato meg a gorgetes elott. |
| wait_for_elementA | Var, amig egy adott elem (szoveg es/vagy resource-id alapjan) megjelenik a kepernyon, legfeljebb timeout_seconds-ig. A 'wait_for_text' egyszeru substring-keresest vegez a nyers XML-ben; ez a tool a strukturalt elem-listaban keres, igy resource-id-re is tud varni (ami nem feltetlenul lathato szovegkent a kepernyon). |
| list_appsA | Telepitett alkalmazasok csomagneveinek listaja. only_third_party=True (alap) eseten csak a felhasznalo altal telepitett (nem rendszer-) alkalmazasokat mutatja - igy nem 300+ soros rendszerlista jon vissza egy egyszeru kerdesre. |
| app_infoC | Egy alkalmazas reszletei: verzio, telepites datuma, engedelyek osszefoglaloja. |
| launch_appA | Alkalmazas inditasa csomagnev alapjan (pl. 'com.android.settings'). Ha az 'activity'-t nem adod meg, a rendszer alapertelmezett (launcher) aktivitasat inditja a 'monkey' eszkozzel - ez a legmegbizhatobb modja annak, hogy egy tetszoleges alkalmazast egyetlen csomagnevvel elinditsunk. |
| open_urlB | URL megnyitasa az alapertelmezett alkalmazasban (bongeszo, terkep, YouTube, stb.
|
| stop_appC | Alkalmazas eroszakos leallitasa ('force-stop') - mint a Beallitasokban. |
| install_apkA | APK telepitese a szamitogeprol az eszkozre ( A local_path a GEPEDEN levo APK fajl elerhetosege (nem az eszkozon). Csak megbizhato forrasbol szarmazo APK-t telepits - ismeretlen forrasu fajl telepitesehez a szerver megerositest ker. ADMIN modot igenyel. |
| uninstall_appA | Alkalmazas eltavolitasa a csomagneve alapjan. ADMIN modot igenyel, megerositest ker. |
| clear_app_dataA | Egy alkalmazas osszes helyi adatanak torlese (mint 'Adatok torlese' a Beallitasokban). Ez visszaallitja az alkalmazast telepites utani, "uj" allapotba - a bejelentkezesek, mentesek, gyorsitotar mind elveszik. ADMIN modot igenyel, megerositest ker. |
| list_filesC | Fajlok/konyvtarak listazasa az eszkozon egy adott utvonalon. |
| read_fileA | Szoveges fajl tartalmanak kiolvasasa az eszkozrol (log, config, stb.). Csak sima szoveges fajlokhoz hasznald - binaris fajlhoz a 'pull_file'-t. |
| file_infoC | Egy fajl/konyvtar metaadatai: meret, jogosultsag, modositas ideje. |
| pull_fileA | Fajl letoltese az eszkozrol a szamitogepre ( Igy lehet pl. fenykepeket, WhatsApp mediat vagy naplofajlokat menteni egy torott kijelzoju, de mar korabban engedelyezett (parositott) eszkozrol. A biztonsagos utvonal-kezeles kulon fontos, mert 'adb pull' argumentumkent (nem shell-stringkent) kapja meg - itt nincs is shell-injekcios felszin, csak a helyi celmappa letezeset ellenorizzuk. |
| push_fileB | Fajl feltoltese a szamitogeprol az eszkozre ( |
| make_dirC | Uj konyvtar letrehozasa az eszkozon. |
| move_pathA | Fajl/konyvtar athelyezese vagy atnevezese az eszkozon (helyben, nem a gepre). |
| delete_pathA | Fajl vagy konyvtar torlese az eszkozon. Megerositest ker (nem visszavonhato). |
| logcat_tailA | Az utolso N sor a rendszernaplobol (logcat) - hibakereseshez. filter_tag megadasaval csak az adott tag-re/prioritasra szurt sorokat kapod (pl. 'MyApp:V *:S' csak a sajat app verbose logjait mutatja). |
| list_notificationsC | Az eszkozon jelenleg aktiv ertesitesek osszefoglaloja (dumpsys notification). |
| running_processesC | Aktualisan futo folyamatok listaja az eszkozon (ps -A rovidítve). |
| waitA | Egyszeru varakozas - kepernyoatmenetek/betoltodesek kivarasahoz. Ha egy konkret szoveg megjelenesere varsz, a 'wait_for_text' tool hatekonyabb (nem var feleslegesen tovabb, ha a szoveg mar hamarabb megjelenik). |
| shell_runA | Tetszoleges shell parancs futtatasa az eszkozon ('adb shell'). Ez a menekulesi ut olyan muveletekhez, amikre nincs kulon tool. Mindig a legspecifikusabb tool-t reszesitsd elonyben (pl. 'tap' a 'shell_run("input tap ...")' helyett) - igy a naplok es a megerosites-kerdesek is ertelmezhetobbek maradnak. Kozepes kockazatunak szamit, megerositest ker. |
| rebootA | Eszkoz ujrainditasa. mode: 'normal', 'recovery' vagy 'bootloader'. 'bootloader'/'recovery' mod magasabb kockazatu - onnan a normal hasznalathoz altalaban kulon (fizikai gombos) muvelet vagy flash-eles szukseges, ezert erosebb megerositest ker. |
| backup_apps_dataA | Teljes ADB mentes keszitese az eszkozrol egy .ab fajlba a szamitogepen. FONTOS: ez a standard Android |
| connect_wifiA | Kapcsolodas vezetek nelkuli ADB-vel ('adb connect ip:port'). Elotte a telefonon be kell kapcsolni a Fejlesztoi beallitasok > Vezetek nelkuli hibakereses funkciot, ami megadja a cimet/portot (vagy egy parositasi kodot ujabb Android verziokon - azt kulon kell parositani 'adb pair'-rel, amit ez a tool jelenleg nem fed le). |
| disconnect_deviceC | Vezetek nelkuli ADB kapcsolat bontasa egy eszkozzel. |
| foreground_appA | Az eppen elterben lathato alkalmazas es aktivitas neve. Ez adja a modellnek a 'kontextust' - mit lat most a felhasznalo a kepernyon - meg mielott ui_dump-ot vagy screenshot-ot kerne. |
| wifi_toggleC | Wifi be- vagy kikapcsolasa. |
| bluetooth_toggleC | Bluetooth be- vagy kikapcsolasa. |
| airplane_mode_toggleC | Repulo uzemmod be- vagy kikapcsolasa. |
| set_volumeC | Hangero beallitasa. stream: 'music', 'ring', 'alarm', 'notification', 'call'. level: 0-tol a stream maximumaig (tipikusan 0-15, eszkoztol fuggoen). |
| open_notification_panelB | Az ertesitesi/gyorsbeallitasok panel lehuzasa a kepernyo tetejerol. |
| screen_orientationC | Kepernyo-forgatas: 'auto', 'portrait', 'landscape', 'landscape_reverse'. |
| open_app_and_waitA | Alkalmazas inditasa, es varakozas, amig tenylegesen az kerul elotterbe. Egy hivasban vegzi el, amit kulon 'launch_app' + tobbszori 'foreground_app' ellenorzes tenne - hasznos, ha biztosra akarsz menni, hogy az app tenyleg elindult, mielott tovabbi lepeseket teszel. |
| fill_formA | Tobb mezo kitoltese egy hivasban. 'fields' kulcsa a celmezo resource-id-ja (lasd 'find_element'/'ui_dump'), erteke a beirando szoveg. Pl.: {"com.app:id/email": "pelda@pelda.hu", "com.app:id/password": "titok"}. Minden mezot sorban megkeres, rakoppint, majd beirja a szoveget (unicode-biztos modon). |
| wait_until_screen_changesA | Var, amig a kepernyo UI-tartalma erzekelhetoen valtozik (nem ugyanaz a UI-hierarchia, mint a hivaskori allapot). Hasznos gomb-koppintas UTAN, amikor nem tudod elore, milyen konkret szoveg fog megjelenni, csak azt, hogy 'tortenjen valami'. |
| assert_textA | Ellenorzi, hogy egy szoveg lathato-e (vagy NEM lathato-e) a kepernyon. Hasznos automatizalt tesztfolyamatok zaro lepeserekent ('sikeres' felirat megjelent-e, hibauzenet NEM jelent-e meg, stb.). Sose dob kivetelt - mindig egy vilagos PASS/FAIL szoveget ad vissza, hogy az agent eldonthesse, mit tegyen. |
| device_capabilitiesA | Az eszkoz/gep helyreallitasi kepessegeinek diagnosztikaja. Minden ertek 'supported' | 'unsupported' | 'unknown' - az 'unknown' EGYENRANGU valasz, sose talalunk ki tamogatast. Ha az ADB nem erheto el (pl. torott kijelzo, sose jovahagyott gep), add meg manufacturer_hint/model_hint-et kezzel (a telefon dobozarol/beallitasokbol, ha meg hozzaferheto), hogy legalabb a video-kimeneti kepesseget lekerdezhessuk az ismert-modell adatbazisbol. |
| rescue_probeA | Teljes helyreallitasi diagnosztika + emberi nyelvu ajanlas egyben. Ugyanazt a jelentest adja, mint a 'device_capabilities', de a vegen egy konkret, a tenylegesen ismert adatokra epulo javaslatot is ad, hogy mit erdemes kovetkezo lepeskent tenni. |
| explain_capabilityB | Egy kepesseg-jelzo (pl. 'wired_video_output') emberi nyelvu magyarazata. |
| rescue_start_mirrorA | Teljes kepernyo-tukrozes es -vezerles inditasa (a hivatalos scrcpy sajat ablakaban). ADB-t igenyel, MAR engedelyezett eszkozon. profile: 'quality', 'balanced', 'low_latency' vagy 'gaming'. read_only=True: GARANTALTAN nem tovabbit semmilyen eger/billentyuzet/erintes bemenetet a keszulek fele, es nem szinkronizal vagolapot - kizarolag a keszulek kepenek valos ideju megjelenitesehez, a hivatalos scrcpy sajat, dokumentalt kapcsoloival (--no-control, --no-audio, --no-clipboard-autosync) ervenyesitve. Hasznald ezt, ha CSAK meg akarod nezni a kepernyot, anelkul hogy barmilyen veletlen bemenetet kockaztatnal (pl. masok altal hasznalt keszulek, vagy erzekeny/eppen hasznalatban levo sajat keszulek megfigyelese). print_fps=True: a scrcpy sajat --print-fps kapcsoloja - a tenyleges stream frame rate-et irja a folyamat stderr/stdout-jara, nem becslest ad. |
| rescue_start_otgA | ADB nélküli, AOA-alapú billentyűzet/egér-vezérlés indítása ('scrcpy --otg'). FONTOS KORLÁT: ebben a módban NINCS kép és NINCS hang - a scrcpy a SAJÁT fizikai USB billentyűzetedet/egeredet továbbítja a telefonnak. Ha a telefon kijelzője még látszik (csak az érintés/ujjlenyomat halott), a saját egereddel/billentyűzeteddel tudsz PIN-t/mintát beírni. Ez NEM automatikus próbálgatás - te (a tulajdonos) írod be, amit tudsz. |
| rescue_list_sessionsA | A jelenleg futó (vagy nemrég leállt) Rescue munkamenetek listája. |
| rescue_stop_sessionA | Egy futó Rescue munkamenet (tükrözés vagy OTG) leállítása PID alapján. |
| rescue_scrcpy_statusB | A hivatalos scrcpy binaris allapota ezen a gepen (megtalalhato-e, verzio). |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 71 tools
Several tools form overlapping families—screen capture/UI dump/OCR, wait/condition helpers, element-based tap/type wrappers, and rescue diagnostics—so an agent must compare many near-duplicate options before acting. Although the descriptions are detailed and often cross-reference one another, the boundaries are not clear from the tool names alone and misselection is likely.
Names are consistently lowercase snake_case, but the grammar is mixed: noun-first names like device_list and screen_record coexist with verb-first names like list_apps and list_files, while some tools are bare verbs like tap, swipe, and wait. Rescue tools also use their own prefix, making the set readable but not a uniform verb_noun convention.
71 tools is far beyond the well-scoped 3-15 range, and many tools are convenience wrappers over other tools, such as observe_screen, tap_element, type_into, scroll, open_app_and_wait, and rescue_probe. The broad Android-control and rescue scope justifies some size, but the surface feels inflated and would be tighter with fewer, more composable tools.
The surface covers app lifecycle, UI automation, file operations, device/network info, notifications, logs, backup, and rescue workflows, with shell_run as an escape hatch. Minor gaps exist, such as no direct adb pair support, no clipboard read, and no direct recovery flashing, but agents can work around them.