原型 · 预览版:收录官方注册中心里的全部服务器,每 30 分钟同步一次。评价和账户功能将在后续阶段推出。
PopNx MCP为使用 AI 的人准备的 MCP 服务器 · 用大白话讲清楚

Devilge

作者:Yercko版本 0.2.3i★ –i在你的电脑上运行
注册名称io.github.Yercko/devilge

安装

概览

作者提供的说明(英文原文)

Android/KMM MCP server: logcat, ADB device control, Compose previews, network, Maestro flows.

PopNx MCP 的三大支柱

这三项永远不会合并成一个分数:意见、测量和人气是不同的东西。

它能帮你做什么

我们还没有为它写通俗的介绍。下面是我们从注册中心读取到的事实。

  • 连接方式: 在你的电脑上运行
  • 传输方式: stdio
  • 分类: 其他
  • 你需要填写:DEVILGE_ANDROID_PROJECT_ROOT

安装

选择你使用的 AI 应用,然后复制设置。

安装之前

  • 基础检查:1 项中通过 1 项
  • 在你的电脑上运行,拥有你的用户账户的权限(文件、网络、应用)。
  • 需要你自己填写: DEVILGE_ANDROID_PROJECT_ROOT, DEVILGE_OUTPUTS_ROOT, DEVILGE_DEFAULT_DEVICE_SERIAL, DEVILGE_FLOWS_ROOT, DEVILGE_MAESTRO_BIN_PATH, DEVILGE_ALLOW_FLOW_SCRIPTS, DEVILGE_HTTP_LOG_TAGS, DEVILGE_HTTP_LOG_FORMAT

你需要

  • npm已安装 Node.js(用于 npx 命令)

你用的是哪个应用?

在上方选择你的应用。我们会记住它,下次按钮会显示“安装到 …”。

打开 Claude Desktop → Settings → Developer → Edit Config,把下面的内容粘贴到 claude_desktop_config.json

{
  "mcpServers": {
    "devilge": {
      "command": "npx",
      "args": [
        "-y",
        "devilge"
      ],
      "env": {
        "DEVILGE_ANDROID_PROJECT_ROOT": "your-value",
        "DEVILGE_OUTPUTS_ROOT": "your-value",
        "DEVILGE_DEFAULT_DEVICE_SERIAL": "your-value",
        "DEVILGE_FLOWS_ROOT": "your-value",
        "DEVILGE_MAESTRO_BIN_PATH": "your-value",
        "DEVILGE_ALLOW_FLOW_SCRIPTS": "your-value",
        "DEVILGE_HTTP_LOG_TAGS": "your-value",
        "DEVILGE_HTTP_LOG_FORMAT": "your-value"
      }
    }
  }
}

在终端中运行这条命令

claude mcp add devilge --env DEVILGE_ANDROID_PROJECT_ROOT=your-value --env DEVILGE_OUTPUTS_ROOT=your-value --env DEVILGE_DEFAULT_DEVICE_SERIAL=your-value --env DEVILGE_FLOWS_ROOT=your-value --env DEVILGE_MAESTRO_BIN_PATH=your-value --env DEVILGE_ALLOW_FLOW_SCRIPTS=your-value --env DEVILGE_HTTP_LOG_TAGS=your-value --env DEVILGE_HTTP_LOG_FORMAT=your-value -- npx -y devilge

运行前请先填写空着的值。

在 Cursor 中打开

或者自己复制设置

粘贴到项目中的 .cursor/mcp.json,或 ~/.cursor/mcp.json

{
  "mcpServers": {
    "devilge": {
      "command": "npx",
      "args": [
        "-y",
        "devilge"
      ],
      "env": {
        "DEVILGE_ANDROID_PROJECT_ROOT": "your-value",
        "DEVILGE_OUTPUTS_ROOT": "your-value",
        "DEVILGE_DEFAULT_DEVICE_SERIAL": "your-value",
        "DEVILGE_FLOWS_ROOT": "your-value",
        "DEVILGE_MAESTRO_BIN_PATH": "your-value",
        "DEVILGE_ALLOW_FLOW_SCRIPTS": "your-value",
        "DEVILGE_HTTP_LOG_TAGS": "your-value",
        "DEVILGE_HTTP_LOG_FORMAT": "your-value"
      }
    }
  }
}

浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。

在 VS Code 中打开

或者自己复制设置

粘贴到项目中的 .vscode/mcp.json

{
  "servers": {
    "devilge": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "devilge"
      ],
      "env": {
        "DEVILGE_ANDROID_PROJECT_ROOT": "your-value",
        "DEVILGE_OUTPUTS_ROOT": "your-value",
        "DEVILGE_DEFAULT_DEVICE_SERIAL": "your-value",
        "DEVILGE_FLOWS_ROOT": "your-value",
        "DEVILGE_MAESTRO_BIN_PATH": "your-value",
        "DEVILGE_ALLOW_FLOW_SCRIPTS": "your-value",
        "DEVILGE_HTTP_LOG_TAGS": "your-value",
        "DEVILGE_HTTP_LOG_FORMAT": "your-value"
      }
    }
  }
}

浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。

这个服务器在你的电脑上运行,而 ChatGPT 只能连接互联网上的服务器。请选择其他应用。

你的选择通过 Cookie 保存在这台设备上,无需账户。

需要你填写的值

  • DEVILGE_ANDROID_PROJECT_ROOT 必填 env
    Absolute path to the Android/KMM project root that devilge inspects (Gradle modules, source files, build outputs).
  • DEVILGE_OUTPUTS_ROOT env
    Directory where devilge writes screenshots and UI dumps. Defaults to /.devilge-outputs/.
  • DEVILGE_DEFAULT_DEVICE_SERIAL env
    Default ADB serial used when a tool does not specify one. Useful when several devices/emulators are attached.
  • DEVILGE_FLOWS_ROOT env
    Directory containing Maestro YAML flows. Defaults to /devilge-flows/.
  • DEVILGE_MAESTRO_BIN_PATH env
    Absolute path to the Maestro binary. If unset, devilge resolves it from PATH; if absent, Maestro tools degrade gracefully.
  • DEVILGE_ALLOW_FLOW_SCRIPTS env
    Set to 'true' to allow Maestro flows containing 'runScript:' blocks. Default is false; flows with scripts are rejected.
  • DEVILGE_HTTP_LOG_TAGS env
    Comma-separated logcat tags scanned for HTTP traffic. Defaults to 'HttpClient,OkHttp' (covers Ktor + OkHttp/Retrofit).
  • DEVILGE_HTTP_LOG_FORMAT env
    HTTP log parser to use: 'auto' (default), 'ktor', or 'okhttp'.

这些设置是根据作者在注册中心的条目生成的。如果 README 的写法不同,请以 README 为准。

它能做什么

它在你的电脑上运行;安装后,工具列表会显示在你的 AI 应用中。

基础检查i

我们检查的是任何人都能看到的信息;我们没有阅读代码。不适用的检查项不计入总数。 · 检查于 2026年11月6日

  • ✓ 通过

    作者与仓库一致

    注册名称已通过 GitHub 账户 Yercko 验证,该账户拥有此仓库

  • … 尚未检查

    仍在维护

    我们还没有从 GitHub 读取这个仓库

  • … 尚未检查

    有许可证

    我们还没有从 GitHub 读取这个仓库

  • – 不适用

    端点有响应

    它在你的电脑上运行,没有互联网端点

  • – 不适用

    使用 OAuth 登录

    在你的电脑上运行,改用本地设置

  • … 尚未检查

    工具描述中没有隐藏指令

    它在你的电脑上运行;我们只能读取互联网端点的工具列表

与“其他”中的其他服务器比较i

  • 星标数多于此分类中其他 32461 个服务器的 0%
  • 发布到注册中心的时间比此分类中其他 32461 个服务器的 9% 更新
  • 基础检查结果等于或优于此分类中其他 32461 个服务器的 100%

与注册中心里这个分类中所有活跃的服务器比较。只有当发布者拥有该仓库时,星标数才计入。

常见问题

Devilge 安全吗?

它在 1 项适用的基础检查中通过了 1 项。我们没有阅读代码。在添加密钥或令牌之前,请先看看这个服务器要求哪些权限,并使用只具备所需权限的密钥。

它需要哪些密钥或代码?

你需要填写:DEVILGE_ANDROID_PROJECT_ROOT

它在我的电脑上运行还是在云端?

它在你的电脑上运行。你的 AI 应用会在需要时启动它,数据不会经过作者的服务器(除非它自己调用在线服务)。

它还在维护吗?

GitHub 仓库最后更新于–,最新版本(0.2.3)于6个月前进入注册中心。

哪些应用可以使用它?

支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。你的电脑上还需要有 Node.js。

有什么可以替代它?

同一分类中有:Spec Driven Development, Remote Desktop Commander, dotnet-mcp

替代选择

同一分类中其他作者的服务器,按星标数排序。

如何看卡片:★ GitHub 星标i三大支柱:评价 · 检查 · 使用情况i更新 = 最新版本发布到注册中心的时间i

Spec Driven Development

作者:formulahendry

MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.

在你的电脑上运行★ 440MIT14个月前更新
安装

Remote Desktop Commander

作者:desktop-commander

Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.

在云端运行★ 211昨天更新
安装

dotnet-mcp

作者:Skymly

MCP server for .NET symbols, XAML, source generators, and restricted workspace edit

在你的电脑上运行今天更新
安装

作者的 README

打开 README

按原文从作者的仓库复制。PopNx MCP 没有审查或背书其内容。HTML、图片和脚本已被移除。链接会离开本站。

devilge

Model Context Protocol (MCP) server that lets an AI assistant — typically Claude — develop, drive, and observe an Android / KMM app end-to-end.

devilge exposes 33 tools that cover the full inner loop: read the project, build it, install it, launch it, drive its UI, capture errors and network traffic, run tests. Anything an LLM coding agent would otherwise have to ask the user to do manually.

What's inside

CategoryToolsPurpose
Device read (8)list_devices, get_logcat, get_app_errors, inspect_packages, resize_logcat_buffer, get_network_calls, get_compose_preview_source, list_compose_previewsObserve device + project state
Project static (3)get_project_structure, get_compose_previews_tree, run_gradle_task (the latter wraps build-result parsers for kotlinc/javac/ksp errors, JUnit XML, Lint XML)Inspect Gradle/KMM project + run any Gradle task
Device drive (7)take_screenshot, dump_ui, input_tap, input_text, input_key, input_swipe, set_input_visualizationManipulate the running app
Locators + waits (6)tap_text, tap_resource_id, set_text, wait_for_text, wait_for_resource_id, wait_for_idleSemantic UI navigation, no coordinate magic
Lifecycle (5)launch_app, force_stop_app, clear_app_data, install_apk, run_instrumented_testsCold-start app, run Espresso tests, fast install
Maestro flows (optional) (3)run_maestro_flow, list_maestro_flows, validate_maestro_flowReusable YAML flows for recurring navigation
Composition (1)batchChain multiple devilge tools in one round trip

215 unit tests in Vitest, all green. Strict TypeScript (strict, noUncheckedIndexedAccess).

Batching for fewer permission prompts

Hosts that confirm every tool call (Claude Desktop, Cowork) can become noisy when the agent walks through multi-step UI flows. devilge_batch collapses a sequence into a single MCP call so the user approves once for the whole sequence.

// Tap "Settings", wait, screenshot, tap a row, screenshot — one approval.

{ "actions": [ { "name": "devilge_tap_text", "input": { "text": "Settings" } }, { "name": "devilge_wait_for_idle", "input": { "timeoutMs": 5000 } }, { "name": "devilge_take_screenshot" }, { "name": "devilge_tap_text", "input": { "text": "Wallpaper & style" } }, { "name": "devilge_take_screenshot" } ] }

Rules: capped at 20 actions per call; cannot be nested; cannot include destructive tools (devilge_clear_app_data, devilge_install_apk) — those always require their own dedicated prompt; stops on the first error and reports which step failed.

All tools also expose MCP annotations (readOnlyHint, idempotentHint, destructiveHint, openWorldHint). Hosts that respect annotations can auto-approve safe reads and prompt only on state-changing tools.

Architecture

Clean / hexagonal layering, every concern replaceable in isolation:

src/

├── config/ # Config loading, structured logger, typed errors ├── domain/ │ ├── entities/ # Pure data types │ └── ports/ # Interfaces the application talks to ├── application/ # Use cases — orchestrate ports, no IO of their own ├── infrastructure/ │ ├── adb/ # AdbAdapter, AdbAppController, runners, parsers │ ├── build/ # Gradle adapter + parsers (compile errors, JUnit, Lint) │ ├── maestro/ # Optional Maestro adapter + YAML validator │ ├── network/ # Ktor logcat parser + header sanitizer │ ├── scanners/ # ComposePreviewScanner, ProjectScanner, FileWalker │ └── security/ # PathValidator, CommandSanitizer └── presentation/ └── tools/ # MCP tool definitions (Zod schemas + handlers)

src/server.ts is the *composition root*: it constructs every concrete dependency and wires them into an McpServer. Nothing else in the codebase performs construction.

Security model

devilge runs on a developer's machine, exposes mutating tools to an LLM, and shells out to ADB and (optionally) Gradle / Maestro. It assumes the operator connects only to a dev emulator or wiped test device, never a personal device with logged-in apps.

  • Project sandbox. All filesystem reads/writes resolve, after symlink resolution, to paths inside DEVILGE_ANDROID_PROJECT_ROOT or the configured outputs / flows roots. Any escape throws SecurityError.
  • No shell. Every external process (adb, gradlew, maestro) is spawned with shell: false and an argv array. Arguments are never concatenated into strings.
  • Strict argument allowlists. Device serials, logcat tags, package names, activity names, deep links, Gradle tasks, Maestro flow names and env-var keys all pass through CommandSanitizer regex allowlists before reaching argv.
  • Resource caps. Logcat capped (5000 line ceiling), ADB stdout cap 8 MiB, Gradle output cap 256 KiB ring buffer, file scans bounded, screenshot timeout 15 s, instrumented-test timeout 30 min default cap.
  • Symlinks ignored. Walkers never follow symlinks.
  • Logs go to stderr only. Stdout is reserved for the MCP JSON-RPC transport.
  • Errors are sanitized. Only DevilgeError subclasses surface their messages. Unexpected exceptions become an opaque INTERNAL_ERROR.
  • Header redaction. Authorization, Cookie, Set-Cookie, X-API-Key and other well-known sensitive headers are redacted from get_network_calls output.
  • Maestro `runScript:` denied by default. YAML flows containing runScript: blocks (which execute JS) are rejected unless the operator explicitly sets DEVILGE_ALLOW_FLOW_SCRIPTS=true.
  • No frontmost-app check. devilge does NOT verify that the targeted package matches the device's foreground app. That check is a deployment concern — keep your dev device clean.

The MVP does include write tools (input automation, app install, data wipe, force-stop). These are gated to a dev-only device by operator policy, not by server logic.

Setup

cd devilge

npm install cp .env.example .env

edit .env with your project's absolute path

npm run build

Run the tests:

npm test

Verify the build:

npm run typecheck    # static type-check (no emit)

npm run build # emit dist/ npm run lint # eslint

Connecting to Claude Desktop

Add an entry to your claude_desktop_config.json (path varies by OS):

{

"mcpServers": { "devilge": { "command": "node", "args": ["/absolute/path/to/devilge/dist/index.js"], "env": { "DEVILGE_ANDROID_PROJECT_ROOT": "/absolute/path/to/your/android/project", "DEVILGE_KTOR_LOG_TAG": "HttpClient" } } } }

Restart Claude Desktop. The 33 tools should appear in the tool picker.

Local smoke test (MCP Inspector)
DEVILGE_ANDROID_PROJECT_ROOT=/absolute/path/to/your/android/project \

DEVILGE_KTOR_LOG_TAG=HttpClient \ npx --yes @modelcontextprotocol/inspector \ node dist/index.js

Configuration reference

VariableRequiredDefaultDescription
DEVILGE_ANDROID_PROJECT_ROOT✅—Absolute path to the Android/KMM project. All file reads are sandboxed under this directory.
DEVILGE_ADB_PATHadb (from PATH)Absolute path to the adb binary. Pinning is recommended.
DEVILGE_DEFAULT_DEVICE_SERIAL—Default serial used when a tool call omits it. Useful when several devices are attached.
DEVILGE_LOGCAT_MAX_LINES500Default cap for get_logcat. Hard upper bound: 5000.
DEVILGE_LOG_LEVELinfoOne of error, warn, info, debug.
DEVILGE_KTOR_LOG_TAGHttpClientLogcat tag the HTTP-client logger writes under. Use HttpClient for Ktor (default), OkHttp for Retrofit/OkHttp, or whatever your custom logger uses.
DEVILGE_HTTP_LOG_FORMATautoWhich parser(s) to apply. ktor, okhttp, or auto (tries both).
DEVILGE_OUTPUTS_ROOT /.devilge-outputs/Where screenshots / UI dumps land. Add to .gitignore.
DEVILGE_FLOWS_ROOT /devilge-flows/Where Maestro YAML flows live.
DEVILGE_MAESTRO_BIN_PATHauto-detected from PATHAbsolute path to the maestro binary. Optional — Maestro tools degrade gracefully when missing.
DEVILGE_ALLOW_FLOW_SCRIPTSfalseSet to true to allow runScript: blocks inside Maestro YAML. Off for safety.

Optional integrations

Maestro (flows)

Maestro is optional. Without it installed, every other devilge tool keeps working. The three flow tools (run_maestro_flow, list_maestro_flows, validate_maestro_flow) register unconditionally and return MAESTRO_NOT_INSTALLED when the binary isn't found.

To enable:

brew tap mobile-dev-inc/tap

brew install maestro

or

curl -Ls "https://get.maestro.mobile.dev" | bash

Restart the inspector. Flows go in /devilge-flows/ .yaml. Example:

appId: com.example.your.app

  • launchApp: clearState: true
  • tapOn: "Email"
  • inputText: ${EMAIL}
  • tapOn: "Password"
  • inputText: ${PASSWORD}
  • tapOn: "Sign in"
  • assertVisible: "Home"

Then:

{

"name": "login_flow", "params": { "EMAIL": "user@example.com", "PASSWORD": "..." } }

MAESTRO_DISABLE_ANALYTICS=true is injected automatically. runScript: blocks are denied unless you opt in.

Headless Compose preview rendering (recipe, no devilge tool)

You can render @Preview Composables to PNG without launching the full app. devilge does NOT add a dedicated tool for this — the existing run_gradle_task plus the official Google plugin cover it cleanly, and adding a wrapper would make us depend on Gradle conventions that vary by project.

This is completely optional: if you don't add the plugin, devilge runs unchanged. You only lose this specific workflow.

To enable in your project, add to your Compose module's build.gradle.kts:

plugins {

// existing plugins... id("com.android.compose.screenshot") version "0.0.1-alpha10" }

android { experimentalProperties["android.experimental.enableScreenshotTest"] = true }

And in gradle/libs.versions.toml:

[plugins]

composeScreenshot = { id = "com.android.compose.screenshot", version = "0.0.1-alpha10" }

Once the plugin is in place, render previews from the LLM via the existing tool:

devilge_run_gradle_task {

"task": ":composeApp:validateDebugScreenshotTest" }

The PNGs land under composeApp/build/outputs/screenshotTest/.... Claude can then read them via its Read tool to verify visual output without installing the app.

Recommended inner-loop workflow

1. run_gradle_task ":composeApp:assembleDebug"   # build once at start
  1. install_apk { "module": ":composeApp" } # ~5-8 s vs Gradle's 30-60 s
  2. launch_app { "packageName": "...", "clean": true }
  3. tap_text / set_text / wait_for_text # navigate to the screen
  4. take_screenshot # confirm visual state
  5. get_app_errors { "followMs": 10000 } # capture errors as they happen
  6. get_network_calls # verify HTTP requests
  7. on bug → edit code → back to step 1 (Gradle is incremental, fast)

For recurring navigation paths (login, search, etc.), capture once as a Maestro flow and replay with one tool call.

Backlog (not committed, lowest priority)

  • Compose Live Edit MCP — true HMR for Android Compose. Major project (~2-3 months MVP, JVMTI agent + bytecode transformation + protocol). Waiting for JetBrains' Compose Hot Reload to land for Android first; the wrapper would be ~1-2 weeks.
  • `pull_room_database` — pull Room SQLite fr

只显示了开头部分;其余内容请在仓库中阅读

问 PopNx