Skip to main content
Glama

Tested tools for Android and Kotlin Multiplatform developers and their coding agents

CI npm License: MIT Node.js

Website · MCP setup · npm · Report a bug


AndroidBoss turns the fiddly parts of Android and Kotlin® Multiplatform work into small, deterministic tools: deobfuscating an R8 stack trace, checking that Kotlin, AGP and Gradle versions work together, finding what changes when you raise targetSdk, writing actual declarations for each KMP target, and more.

The same tools are available three ways:

Where

Best for

Hosted MCP server

https://mcp.androidboss.org/mcp

Giving Claude Code, Codex, Gemini CLI, Cursor or VS Code the tools with nothing to install

Local CLI and MCP server

npx androidboss

Large or private inputs, offline work, scripts and CI

Web tools

androidboss.info

Using them in a browser, with your input never leaving the page

Every tool's output is checked against the real toolchain before it ships: R8 and Google's retrace, Gradle, aapt2, Kotlin/Native, swiftc and the Android CLI.

Contents

Related MCP server: claude-android

Quick start

Give your coding agent the tools (Claude Code shown; other agents below):

claude mcp add --transport http androidboss https://mcp.androidboss.org/mcp

Then ask it something like "Retrace this crash with app/build/outputs/mapping/release/mapping.txt" or "Can I move to AGP 9.5 with my current Gradle version?"

Or run the tools yourself (Node.js 22 or newer):

npx androidboss tools
npx androidboss retrace --mapping @app/build/outputs/mapping/release/mapping.txt < crash.txt
npx androidboss check-compatibility --kotlin 2.4.0 --agp 9.5.0 --gradle 9.6.0

Tools

CLI command

MCP tool

What it does

retrace

retrace

Deobfuscates a stack trace with the mapping.txt from the same build. Output matches Google's retrace.

json-to-kotlin

json_to_kotlin

Kotlin data classes from a JSON sample, for kotlinx.serialization, Moshi or Gson.

check-compatibility

check_compatibility

Whether Kotlin, AGP, Gradle, KSP, Compose Multiplatform and compileSdk versions work together.

android-cli-tasks

android_cli_tasks

What the Android CLI can do, and the fields each task takes.

android-cli-command

android_cli_command

The exact Android CLI command for a task.

crash-to-prompt

crash_to_prompt

A crash or ANR as a short, redacted prompt for an agent: root cause, files to open, trimmed trace.

version-catalog

version_catalog

Moves a build file's dependencies and plugins into libs.versions.toml.

convert-vector

convert_vector

SVG, VectorDrawable and Compose ImageVector, in any direction.

keep-rules

keep_rules

Writes R8 keep rules for reflection, JSON models and JNI, or lints proguard-rules.pro.

expect-actual

expect_actual

actual declarations for each KMP target from commonMain expect code.

kotlin-to-swift

kotlin_to_swift

How a shared Kotlin file looks when called from Swift.

find-kmp-libraries

find_kmp_libraries

KMP libraries by task and target, with current versions and a ready libs.versions.toml.

android-permissions

android_permissions

Permission facts, and a check of your AndroidManifest.xml.

target-sdk-changes

target_sdk_changes

Behaviour changes between two targetSdk levels, flagged against your manifest.

All tools are read-only: they never write files, run commands or call other services.

Connect your agent

The hosted server speaks Streamable HTTP (MCP 2026-07-28, with a fallback for 2025 clients) and needs no sign-in. To run it on your own machine instead, use npx -y androidboss mcp as a stdio server; see the last entry.

claude mcp add --transport http androidboss https://mcp.androidboss.org/mcp

Or in .mcp.json:

{
  "mcpServers": {
    "androidboss": { "type": "http", "url": "https://mcp.androidboss.org/mcp" }
  }
}
codex mcp add androidboss --url https://mcp.androidboss.org/mcp

Or in .codex/config.toml:

[mcp_servers.androidboss]
url = "https://mcp.androidboss.org/mcp"

In .gemini/settings.json:

{
  "mcpServers": {
    "androidboss": { "httpUrl": "https://mcp.androidboss.org/mcp" }
  }
}

In .cursor/mcp.json:

{
  "mcpServers": {
    "androidboss": { "url": "https://mcp.androidboss.org/mcp" }
  }
}

In .vscode/mcp.json:

{
  "servers": {
    "androidboss": { "type": "http", "url": "https://mcp.androidboss.org/mcp" }
  }
}

In .agents/mcp_config.json:

{
  "mcpServers": {
    "androidboss": { "serverUrl": "https://mcp.androidboss.org/mcp" }
  }
}
claude mcp add androidboss -- npx -y androidboss mcp

For agents configured in JSON, add a stdio server:

{
  "mcpServers": {
    "androidboss": { "command": "npx", "args": ["-y", "androidboss", "mcp"] }
  }
}

https://androidboss.info/mcp serves the same tools from the same code, and keeps working for existing setups.

Command-line usage

androidboss <tool> [--option value]... [--json]
androidboss tools              list the tools
androidboss help <tool>        a tool's options
androidboss mcp                run as a local MCP server over stdio

Options come from each tool's input schema, so the CLI and the MCP server always accept the same inputs.

Syntax

Meaning

Example

--name value

An option, in kebab-case or camelCase

--target-sdk 36

@path

Read the value from a file

--manifest @app/src/main/AndroidManifest.xml

-

Read the value from standard input

--manifest -

Piped input

Fills the tool's one missing required text option

androidboss retrace --mapping @mapping.txt < crash.txt

a,b or repeated

A list

--targets android,ios

--key.sub value

One key of an object option

--values.device pixel_9

--json

Print the structured result instead of text

androidboss find-kmp-libraries --query ktor --json

Exit codes: 0 success, 1 the tool reported an error, 2 a usage error (unknown option, missing value, unreadable file).

More examples:

# What changes when targetSdk goes to 36, checked against your manifest
npx androidboss target-sdk-changes --to 36 --manifest @app/src/main/AndroidManifest.xml

# Networking libraries that publish both Android and iOS targets
npx androidboss find-kmp-libraries --category networking --targets android,ios

# Look up permissions and check a manifest for Play-restricted ones
npx androidboss android-permissions --names CAMERA,ACCESS_FINE_LOCATION --manifest @app/src/main/AndroidManifest.xml

Privacy and limits

  • Nothing is stored. The hosted server handles each request in memory and keeps no database; request bodies aren't logged. The CLI runs entirely on your machine.

  • Inputs are capped on the hosted server to stay within Cloudflare's free tier: a mapping.txt up to 5 MB, most other inputs up to 100 KB, and a per-IP rate limit. The CLI accepts mapping files up to 100 MB.

  • Mind what you send. crash_to_prompt redacts emails, tokens and IP addresses, but review crash logs before sharing them with any service.

How it's built

packages/
  core/         Tool logic in plain TypeScript. Runs in browsers, Node.js and Workers.
  data/         Data the tools read: permissions, targetSdk changes, compatibility tables,
                KMP libraries, Apple privacy keys. Refreshed from the source by scripts/.
  mcp/          The MCP server (14 tools) and its HTTP handler.
  cli/          The npm package `androidboss`: the server as commands and as a stdio server.
apps/
  mcp-worker/   mcp.androidboss.org on Cloudflare Workers.

The web tools at androidboss.info use core and data from this repository, so a fix here reaches the website, the MCP server and the CLI together.

Correctness comes from fixtures produced by the real tools. For example, packages/core/src/retrace/fixtures holds a mapping and stack traces from an R8 build together with the exact output of Google's retrace, and the implementation must reproduce it byte for byte.

Development

You need Node.js 22.23 or newer.

git clone https://github.com/androidboss-org/androidboss.git
cd androidboss
npm ci
npm test          # unit tests for every package
npm run check     # type checks

Command

What it does

npm test -w @androidboss/core

Tests for one package

npm run build -w androidboss

Bundles the CLI into packages/cli/dist/androidboss.mjs

node packages/cli/dist/androidboss.mjs tools

Runs your local build of the CLI

npm run dev -w @androidboss/mcp-worker

Serves the MCP Worker at http://localhost:8787/mcp

MCP_URL=http://localhost:8787/mcp npm test -w @androidboss/mcp

Runs the MCP client tests against a running server

Some tests compile or run generated code with real toolchains. They're skipped unless you turn them on:

Variable

Needs

Checks

CHECK_GRADLE=1

Gradle ($GRADLE or a wrapper download); macOS, Android SDK and Xcode for the KMP libraries

Version catalogs compile with Gradle; every KMP library compiles for Android, iOS and JVM

CHECK_KMP=1

Gradle, Android SDK, Xcode

expect/actual stubs compile for every target; generated Swift type-checks with swiftc

CHECK_ANDROID=1

Android SDK, Gradle

VectorDrawables through aapt2; ImageVector and themes through the Kotlin and Compose compilers

CHECK_ANDROID_CLI=1

Android CLI

Every Android CLI command against the installed CLI

CHECK_GRADLE=1 npm test -w @androidboss/core

Contributing

Bug reports, fixes and new tools are welcome.

  1. Open an issue first for anything bigger than a small fix, so we can agree on the approach. For a wrong result, include the input, the output you expected and the tool that produced it.

  2. Keep tools deterministic and read-only. The same input must give the same output, with no network calls.

  3. Prove it against the real tool. A change to output needs a test, ideally with a fixture produced by the official toolchain, like the existing ones.

  4. Run npm test and npm run check before opening a pull request. CI runs both.

Data in packages/data comes from the update scripts in packages/data/scripts; change the script rather than editing the generated JSON by hand.

Releases

Each release has a vX.Y.Z tag matching the version in packages/cli/package.json. Pushing the tag runs the release workflow, which tests the project, publishes the CLI to npm through trusted publishing with provenance (no stored tokens; npm shows which commit and workflow built it), and creates a GitHub Release with the package tarball.

Security

Please don't report security problems in public issues. Use private vulnerability reporting instead.

Support the project

If AndroidBoss saves you time:

  • ⭐ Star the repository so other Android developers can find it.

  • ☕ Sponsor the work with the Sponsor button at the top of the repository.

  • 🛠️ Report a wrong result or send a fix. Real-world inputs make the tools better.

Licence

MIT © AndroidBoss

The CLI bundles third-party packages under their own licences, listed in dist/THIRD-PARTY-LICENSES.txt inside the npm package.

Android is a trademark of Google LLC. Kotlin® is a trademark protected by the Kotlin Foundation. AndroidBoss is an independent project and is not affiliated with or endorsed by Google, JetBrains or the Kotlin Foundation.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    A growing collection of MCP tools for Android Development. Currently features a deterministic Figma-SVG-to-Android-XML converter, with plans for Gradle analysis, Resource management, and ADB integration tools.
    7
    14 npm
    18
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    MCP server for Android dev workflows that exposes Gradle, Manifest, and ProGuard context to Claude, with a library of skills for tasks like AGP upgrade and R8 audit.
    3
    MIT
  • F
    license
    Not graded
    quality
    A
    maintenance
    MCP server that provides AI coding agents real Android development tools—Gradle, adb, logcat, lint, crash triage—through a local, permissioned interface. Enables agents to inspect projects, run safe Gradle tasks, capture logs/screenshots, and triage crashes.
    1
    -
  • A
    license
    B
    quality
    B
    maintenance
    Lets AI coding agents build, test, and lint Android projects with Gradle, control devices and emulators via adb, automate UI through screenshots and input injection, and use a live IDE bridge for refactoring, code inspection, and run configurations. Works with any MCP client over stdio or authenticated HTTP.
    46
    MIT