Devilge
What it does
Android/KMM MCP server: logcat, ADB device control, Compose previews, network, Maestro flows.
- Connects パソコンで動く
- Account or key Needs DEVILGE_ANDROID_PROJECT_ROOT
- Category 開発者ツール
インストール
使っているAIアプリを選んで、設定をコピーしてください。
チェック 2/3 合格 · あなたのパソコンで動きます
まず:どの AI を使っていますか?
使っているアプリを選ぶと、下に手順が表示されます。
Claude につなげますが、先に準備が必要です
Devilge のキーが必要です(提供元のサイトで作成) · 先にパソコンへ Node.js を入れてください(1 回だけ) · パソコン版 Claude アプリ(Windows または Mac)のみ。Web やスマホでは使えません
Devilge に登録してキーを作る
提供元のサイトで登録し、次の手順で使う API キーを作ります。料金や無料プランは提供元のサイトで確認してください。
キーの取り方は下の提供元 README にあります
パソコン版 Claude アプリの設定ファイルを開く
SettingsDeveloperEdit Config
この設定を貼り付けて保存
コマンドを確認中 · 確認が通るとコピーボタンが出ます
キーはアプリの入力欄にだけ貼り付け、チャットに貼ったり人に送ったりしないでください
Claude を終了してもう一度開く
試してみる
Devilge を使って、私に何ができるか教えて、1 つやってみせて✓ Claude が Devilge を使っていると言うか、回答に Devilge のツール名が出れば接続成功です
メニュー名は 2026年11月11日 に Anthropic のヘルプページで確認 · アプリのバージョンにより画面が少し違うことがあります
ChatGPT はまだ Devilge につなげません
Devilge はパソコンに入れて使うものですが、ChatGPT は Web 上で動くサーバーにしかつなげません
代わりにできること
A · Devilge につなげるアプリを使う
- Devilge のキーが必要です(提供元のサイトで作成) · 先にパソコンへ Node.js を入れてください(1 回だけ) · パソコン版 Claude アプリ(Windows または Mac)のみ。Web やスマホでは使えません
- Devilge のキーが必要です(提供元のサイトで作成) · 先にパソコンへ Node.js を入れてください(1 回だけ)
- Devilge のキーが必要です(提供元のサイトで作成) · 先にパソコンへ Node.js を入れてください(1 回だけ)
- Devilge のキーが必要です(提供元のサイトで作成) · 先にパソコンへ Node.js を入れてください(1 回だけ)
B · 開発者ツール の中で ChatGPT につなげる別のサーバー
同じカテゴリでよく使われているものから、キーなしでアドレスだけでつなげるものを選びました
- Sentry✓ ChatGPT
- Compiler Explorer✓ ChatGPT
- GitDiagram✓ ChatGPT
Claude Code につなげますが、先に準備が必要です
Devilge のキーが必要です(提供元のサイトで作成) · 先にパソコンへ Node.js を入れてください(1 回だけ)
Devilge に登録してキーを作る
提供元のサイトで登録し、次の手順で使う API キーを作ります。料金や無料プランは提供元のサイトで確認してください。
キーの取り方は下の提供元 README にあります
ターミナルを開く
Mac:Command+スペースで Terminal と入力 · Windows:PowerShell を開く
このコマンドを貼り付けて Enter
コマンドを確認中 · 確認が通るとコピーボタンが出ます
Enter の前に「your-value」を自分のキーに書き換えてください
キーはアプリの入力欄にだけ貼り付け、チャットに貼ったり人に送ったりしないでください
Claude Code で /mcp と入力
Devilge が一覧にあり、接続済みと表示されれば OK です
試してみる
Devilge を使って、私に何ができるか教えて、1 つやってみせて✓ Claude Code が Devilge を使っていると言うか、回答に Devilge のツール名が出れば接続成功です
メニュー名は 2026年11月11日 に Anthropic のヘルプページで確認 · アプリのバージョンにより画面が少し違うことがあります
Cursor につなげますが、先に準備が必要です
Devilge のキーが必要です(提供元のサイトで作成) · 先にパソコンへ Node.js を入れてください(1 回だけ)
Devilge に登録してキーを作る
提供元のサイトで登録し、次の手順で使う API キーを作ります。料金や無料プランは提供元のサイトで確認してください。
キーの取り方は下の提供元 README にあります
このボタンで Cursor を開く
コマンドを確認中 · 確認が通るとコピーボタンが出ます
キーを入力
Devilge の設定で 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 が空です。自分のキーを入れて保存します
キーはアプリの入力欄にだけ貼り付け、チャットに貼ったり人に送ったりしないでください
Cursor の AI チャットを Agent モードで開く
試してみる
Devilge を使って、私に何ができるか教えて、1 つやってみせて✓ Cursor が Devilge を使っていると言うか、回答に Devilge のツール名が出れば接続成功です
メニュー名は 2026年11月11日 に Cursor のヘルプページで確認 · アプリのバージョンにより画面が少し違うことがあります
VS Code につなげますが、先に準備が必要です
Devilge のキーが必要です(提供元のサイトで作成) · 先にパソコンへ Node.js を入れてください(1 回だけ)
Devilge に登録してキーを作る
提供元のサイトで登録し、次の手順で使う API キーを作ります。料金や無料プランは提供元のサイトで確認してください。
キーの取り方は下の提供元 README にあります
このボタンで VS Code を開く
コマンドを確認中 · 確認が通るとコピーボタンが出ます
キーを入力
Devilge の設定で 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 が空です。自分のキーを入れて保存します
キーはアプリの入力欄にだけ貼り付け、チャットに貼ったり人に送ったりしないでください
VS Code の AI チャットを Agent モードで開く
試してみる
Devilge を使って、私に何ができるか教えて、1 つやってみせて✓ VS Code が Devilge を使っていると言うか、回答に Devilge のツール名が出れば接続成功です
メニュー名は 2026年11月11日 に VS Code のヘルプページで確認 · アプリのバージョンにより画面が少し違うことがあります
Windsurf、Zed、Gemini CLI など MCP を使える他のアプリは追加方法がそれぞれ違います。アプリ一覧で確認してください
JSON 設定は下の「開発者向け」にあります
開発者向け:ターミナルのコマンドと JSON 設定
パソコンにインストール
Claude Code
コマンドを確認中 · 確認が通るとコピーボタンが出ます
Claude Desktop (claude_desktop_config.json)
コマンドを確認中 · 確認が通るとコピーボタンが出ます
Cursor (~/.cursor/mcp.json)
コマンドを確認中 · 確認が通るとコピーボタンが出ます
VS Code (mcp.json)
コマンドを確認中 · 確認が通るとコピーボタンが出ます
自分で入力する値
DEVILGE_ANDROID_PROJECT_ROOT必須 envAbsolute path to the Android/KMM project root that devilge inspects (Gradle modules, source files, build outputs).DEVILGE_OUTPUTS_ROOTenvDirectory where devilge writes screenshots and UI dumps. Defaults to /.devilge-outputs/.DEVILGE_DEFAULT_DEVICE_SERIALenvDefault ADB serial used when a tool does not specify one. Useful when several devices/emulators are attached.DEVILGE_FLOWS_ROOTenvDirectory containing Maestro YAML flows. Defaults to /devilge-flows/.DEVILGE_MAESTRO_BIN_PATHenvAbsolute path to the Maestro binary. If unset, devilge resolves it from PATH; if absent, Maestro tools degrade gracefully.DEVILGE_ALLOW_FLOW_SCRIPTSenvSet to 'true' to allow Maestro flows containing 'runScript:' blocks. Default is false; flows with scripts are rejected.DEVILGE_HTTP_LOG_TAGSenvComma-separated logcat tags scanned for HTTP traffic. Defaults to 'HttpClient,OkHttp' (covers Ktor + OkHttp/Retrofit).DEVILGE_HTTP_LOG_FORMATenvHTTP log parser to use: 'auto' (default), 'ktor', or 'okhttp'.
この設定は、作者のレジストリ登録情報から作成しています。READMEと違う場合は、READMEに従ってください。
ひと目でわかる
使えるアプリ
このサーバーのつなぎ方と、各アプリの公式ドキュメントに基づきます。2026年11月10日に確認。
パソコン上で動かせるアプリ
ClaudeGooseLM StudioMsty StudioCherry StudioCursorVS Code + GitHub CopilotVisual StudioWindsurf (Devin Desktop)ZedKiroClineContinueJetBrains AI AssistantClaude CodeCodex CLIGemini CLIOpenCodenodecodeWarpLibreChatRaycast
できること
パソコンで動くサーバーです。インストールすると、ツール一覧がAIアプリに表示されます。
基本チェックi
誰でも見られる情報をチェックしており、コードは読んでいません。当てはまらない項目は数に入れていません。 · 2026年11月13日にチェック
- ✓ 合格
作者とリポジトリが一致
レジストリ名は、リポジトリを所有するGitHubアカウント Yercko で確認済みです
- ! 注意
今もメンテナンスされている
コードの最終更新:6 か月前(6か月以上前)
- ✓ 合格
ライセンスがある
MITを使用
- – 対象外
エンドポイントが応答する
これはパソコンで動くため、インターネット上のエンドポイントはありません
- – 対象外
OAuthでサインイン
パソコンで動き、代わりにローカルの設定を使います
- … 未チェック
ツールの説明に隠れた指示がない
パソコンで動くサーバーです。ツール一覧を読み取れるのは、インターネット上のエンドポイントがある場合だけです
話し合い
質問、コツの共有、使えないことの報告ができます。「役に立った」の多い順です。
ユーザーレビュー
まだレビューはありません
開発者ツールのほかのサーバーとの比較i
- このカテゴリのほかの5824件のうち0%よりスターが多い
- このカテゴリのほかの5824件のうち11%より最近レジストリに公開
- 基本チェックの結果が、このカテゴリのほかの5824件のうち44%と同じかそれ以上
レジストリでこのカテゴリにある有効なすべてのサーバーと比較しています。スターは、公開者がリポジトリの所有者である場合だけ数えます。
よくある質問
Devilgeは安全ですか?
当てはまる基本チェック3項目のうち2項目に合格しました。コードは読んでいません。キーやトークンを追加する前に、サーバーがどんなアクセスを求めているかを確認し、必要な権限だけを持つキーを使ってください。
どんなキーやコードが必要ですか?
入力が必要なもの:DEVILGE_ANDROID_PROJECT_ROOT
パソコンで動きますか、それともクラウドですか?
あなたのパソコンで動きます。必要なときにAIアプリが起動し、データは作者のサーバーを通りません(サーバー自体がオンラインサービスを呼び出す場合を除きます)。
今もメンテナンスされていますか?
GitHubリポジトリの最終更新は6 か月前、最新バージョン(0.2.3)がレジストリに届いたのは6 か月前です。
どのアプリで使えますか?
Claude Desktop、Claude Code、Cursor、VS CodeなどのMCP対応アプリで使えます。パソコンにNode.jsも必要です。
同じカテゴリのほかの候補
同じカテゴリで、ほかの作者が作ったサーバー。スターの多い順。
カードの見方:↓ 週あたりのダウンロードi★ GitHubスターi3つの柱:レビュー · チェック · 利用状況i更新=最新バージョンをレジストリに公開した日i
GitHub
Connect AI assistants to GitHub - manage repos, issues, PRs, and workflows through natural language.
Serena MCP: the IDE for your agent
A powerful toolkit for coding, providing semantic retrieval and editing capabilities.
作者の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
| Category | Tools | Purpose |
|---|---|---|
| Device read (8) | list_devices, get_logcat, get_app_errors, inspect_packages, resize_logcat_buffer, get_network_calls, get_compose_preview_source, list_compose_previews | Observe 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_visualization | Manipulate the running app |
| Locators + waits (6) | tap_text, tap_resource_id, set_text, wait_for_text, wait_for_resource_id, wait_for_idle | Semantic UI navigation, no coordinate magic |
| Lifecycle (5) | launch_app, force_stop_app, clear_app_data, install_apk, run_instrumented_tests | Cold-start app, run Espresso tests, fast install |
| Maestro flows (optional) (3) | run_maestro_flow, list_maestro_flows, validate_maestro_flow | Reusable YAML flows for recurring navigation |
| Composition (1) | batch | Chain 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_ROOTor the configured outputs / flows roots. Any escape throwsSecurityError. - No shell. Every external process (
adb,gradlew,maestro) is spawned withshell: falseand 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
CommandSanitizerregex 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
DevilgeErrorsubclasses surface their messages. Unexpected exceptions become an opaqueINTERNAL_ERROR. - Header redaction.
Authorization,Cookie,Set-Cookie,X-API-Keyand other well-known sensitive headers are redacted fromget_network_callsoutput. - Maestro `runScript:` denied by default. YAML flows containing
runScript:blocks (which execute JS) are rejected unless the operator explicitly setsDEVILGE_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
| Variable | Required | Default | Description |
|---|---|---|---|
DEVILGE_ANDROID_PROJECT_ROOT | ✅ | — | Absolute path to the Android/KMM project. All file reads are sandboxed under this directory. |
DEVILGE_ADB_PATH | adb (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_LINES | 500 | Default cap for get_logcat. Hard upper bound: 5000. | |
DEVILGE_LOG_LEVEL | info | One of error, warn, info, debug. | |
DEVILGE_KTOR_LOG_TAG | HttpClient | Logcat 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_FORMAT | auto | Which 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_PATH | auto-detected from PATH | Absolute path to the maestro binary. Optional — Maestro tools degrade gracefully when missing. | |
DEVILGE_ALLOW_FLOW_SCRIPTS | false | Set 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
- install_apk { "module": ":composeApp" } # ~5-8 s vs Gradle's 30-60 s
- launch_app { "packageName": "...", "clean": true }
- tap_text / set_text / wait_for_text # navigate to the screen
- take_screenshot # confirm visual state
- get_app_errors { "followMs": 10000 } # capture errors as they happen
- get_network_calls # verify HTTP requests
- 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