devilge
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| DEVILGE_ADB_PATH | No | Absolute path to the adb binary. | adb (from PATH) |
| DEVILGE_LOG_LEVEL | No | One of error, warn, info, debug. | info |
| DEVILGE_FLOWS_ROOT | No | Where Maestro YAML flows live. | <project>/devilge-flows/ |
| DEVILGE_KTOR_LOG_TAG | No | Logcat tag the HTTP-client logger writes under. | HttpClient |
| DEVILGE_OUTPUTS_ROOT | No | Where screenshots / UI dumps land. | <project>/.devilge-outputs/ |
| DEVILGE_HTTP_LOG_FORMAT | No | Which parser(s) to apply: ktor, okhttp, or auto. | auto |
| DEVILGE_LOGCAT_MAX_LINES | No | Default cap for get_logcat. Hard upper bound: 5000. | 500 |
| DEVILGE_MAESTRO_BIN_PATH | No | Absolute path to the maestro binary. | auto-detected from PATH |
| DEVILGE_ALLOW_FLOW_SCRIPTS | No | Set to true to allow runScript: blocks inside Maestro YAML. | false |
| DEVILGE_ANDROID_PROJECT_ROOT | Yes | Absolute path to the Android/KMM project. All file reads are sandboxed under this directory. | |
| DEVILGE_DEFAULT_DEVICE_SERIAL | No | Default serial used when a tool call omits it. |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| devilge_list_devicesA | Lists every Android device or emulator currently visible to ADB on this machine. |
| devilge_get_logcatA | Reads recent logcat output from a connected Android device or emulator using adb. Useful for diagnosing crashes, ANRs, runtime errors, and tracing application logs. |
| devilge_list_compose_previewsA | Statically scans the configured Android/KMM project for Jetpack Compose @Preview functions and returns their locations plus parsed annotation parameters. |
| devilge_get_compose_preview_sourceA | Returns the full source code of a @Preview composable, including its annotations and body. |
| devilge_get_project_structureA | Returns a high-level snapshot of the configured Android/KMM Gradle project: modules, types (android-app / kmm-shared / library), source sets, and key versions. |
| devilge_get_compose_previews_treeA | Returns every Jetpack Compose @Preview in the project organized as modules → files → functions → variants. Multiple @Preview annotations on the same Composable are grouped as variants of one function. Includes a totals summary by |
| devilge_get_network_callsA | Returns recent HTTP request/response pairs captured from the running Android app. Parses two formats from logcat: Ktor |
| devilge_resize_logcat_bufferA | Increase the device-side logcat ring buffer so that recent HTTP / app logs are not evicted within seconds. Applies to subsequent captures only — entries already lost are gone. Recommended whenever Ktor LogLevel.ALL produces dozens of lines per request. |
| devilge_run_gradle_taskA | Runs a Gradle task in the configured Android/KMM project (via the project's gradlew wrapper) and returns a structured summary: success flag, parsed compile errors (kotlinc/javac/kapt/ksp), JUnit test results from build/test-results, Android Lint findings, "What went wrong" failure blocks, plus the tail of stdout/stderr. |
| devilge_get_app_errorsA | Returns recent error-level logs for a specific Android app, filtered by its package name (resolved to PID via |
| devilge_inspect_packagesA | Lists Android applicationIds installed on the device, optionally filtered by a substring. For each match, reports whether a process is currently running and its PID. Use this to discover the right |
| devilge_take_screenshotA | Captures the current device screen ( |
| devilge_dump_uiA | Captures the current foreground UI tree using |
| devilge_input_tapA | Sends a tap ( |
| devilge_input_textA | Types the given text into whatever field currently has focus on the device ( |
| devilge_input_keyA | Sends a key event ( |
| devilge_input_swipeA | Sends a swipe gesture ( |
| devilge_set_input_visualizationA | Toggles the device-side developer options "Show touches" and "Pointer location". When enabled, every tap/swipe leaves a visible marker on screen and the live coords appear in a debug strip — useful to confirm input_tap/input_swipe are landing where expected. Persists until the device reboots. Recommended: enable once at start of a driving session, disable when done. |
| devilge_tap_textA | Internally dumps the UI, finds the unique node whose |
| devilge_tap_resource_idA | Like devilge_tap_text but matches by |
| devilge_set_textA | Locates the input field associated with a label, taps to focus it, and types the given value. Heuristic: focused EditText → contentDescription match → text match → EditText after a label TextView. Returns the matched field summary. |
| devilge_wait_for_textA | Polls the UI dump until a node whose text or contentDescription matches appears, or the timeout elapses. Returns |
| devilge_wait_for_resource_idA | Polls the UI dump until a node with the given resource-id appears, or timeout. |
| devilge_wait_for_idleA | Polls the UI dump and returns when N consecutive dumps have an identical structural digest, or the timeout elapses. Useful between a tap and the next action to absorb animations / asynchronous updates without sleeps. |
| devilge_launch_appA | Launches the app via |
| devilge_force_stop_appA | Runs |
| devilge_clear_app_dataA | Runs |
| devilge_run_instrumented_testsA | Runs |
| devilge_install_apkA | Installs an APK via |
| devilge_run_maestro_flowA | Executes a Maestro YAML flow from DEVILGE_FLOWS_ROOT (default: /devilge-flows/). Maestro is OPTIONAL — if not installed, this tool returns MAESTRO_NOT_INSTALLED with the install command ( |
| devilge_list_maestro_flowsA | Lists every |
| devilge_validate_maestro_flowA | Statically validates a flow YAML: requires |
| devilge_batchA | Executes a sequence of devilge tools sequentially in a single MCP call. Stops on the first error. Use this to chain predictable steps such as tap → wait_for_idle → take_screenshot, reducing tool-call overhead and permission prompts in the host UI. Rules: • Capped at 20 actions per call. • Cannot call itself (no nesting). • Cannot include destructive tools (devilge_clear_app_data, devilge_install_apk). Invoke those directly so the user always sees a dedicated confirmation prompt. • Each sub-tool's input is validated before its handler runs. Returns the concatenated content of every successful step, prefixed with a step label, plus a summary line. On failure, sets isError=true and reports which step stopped the batch and why. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Yercko/devilge'
If you have feedback or need assistance with the MCP directory API, please join our Discord server