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. |
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": 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