Skip to main content
Glama

AndroJack Banner

AndroJack — The Jack of All Android Trades

An MCP server that equips your AI coding assistant with live, verified Android knowledge — so it builds from official sources, not from memory.

Install in VS Code Install in Claude Desktop Install in Cursor Add to Kiro View on npm

Official Product Page Watch AndroJack in Action on YouTube

Also works with: Windsurf · VS Code Copilot · Google Antigravity · JetBrains AI — see Manual Config below ↓

VS Code distribution: Also live on the VS Code Marketplace as AndroJack MCP for VS Code.


Table of Contents


Related MCP server: Android Source Explorer MCP Server

🔥 The Crisis That Created This Tool

In 2025, the Stack Overflow Developer Survey asked 49,000 developers about their experience with AI coding tools. The results should alarm every Android engineer:

  • 84% of developers now use AI coding tools — up from 76% the year before.

  • Trust in AI accuracy collapsed from 40% to just 29% in a single year.

  • 35% of all Stack Overflow visits in 2025 are now triggered by developers debugging and fixing AI-generated code.

The gap between usage and trust is not a coincidence. It is the product of a structural problem: AI models predict tokens, not APIs. They were trained on a snapshot of the world and have no mechanism to know what changed at API 30, what shipped at Google I/O 2025, or what Google Play now rejects at review time.

For Android developers, this failure mode is uniquely dangerous. Android has the fastest-moving ecosystem in mobile development — a new Compose BOM every month, Navigation 3 going stable after seven years of Nav2, Android 16 rewriting the rules on screen orientation locking — and most AI tools have training data that is six months to two years stale by the time you use them.

The result is not just bad code. It is confidently bad code.


⚡ What Actually Breaks In Practice — Documented Evidence

These are not hypothetical risks. They are documented failure modes from real developer projects.

A published case study from Atomic Robot documented a live Navigation 2 → Navigation 3 migration using both Gemini and Claude — with internet access enabled on both. The conclusion, verbatim:

"LLMs still hallucinate versions. Even with internet access, both agents wanted to use an outdated release candidate instead of the stable 1.0.0 release."

Navigation 3 went stable in November 2025 after seven years of the same library. It is a complete architectural rethink: back stacks are now plain Kotlin lists, the monolithic nav graph is gone, and NavDisplay replaces NavController. Google's own migration guide is so aware that AI tools get this wrong that it now contains special "AI Agent:" annotations — instructions embedded directly in the official docs for AI tools to follow. An AI tool that generates Nav2 code for a new Compose project in 2026 is not making a small mistake. It is creating an architectural incoherence that requires a full rewrite to fix.

Jetpack Compose ships a new BOM every month. Since most models' training cutoffs, these APIs changed:

API

Status

What goes wrong

ContextualFlowRow / ContextualFlowColumn

Deprecated in Compose 1.8

AI still generates them — compile warning today, removal tomorrow

TestCoroutineDispatcher

Removed from coroutines-test 1.8+

AI still generates it — non-deterministic test failures in CI

FlowRow overflow parameter

Deprecated in 1.8

Subtle behavioral regression at runtime, silent in most linting setups

AnchoredDraggableState.confirmValueChange

Deprecated

Incorrect drag behavior at anchor boundaries

Navigation 2 in new projects

Superseded by Nav3 stable Nov 2025

Architectural dead-end that requires a rewrite to fix

Every one of these compiles. Most run without errors. The bugs surface later in CI flakiness, UI regressions, or Play Store review failures.

Android 16 made a platform-level change affecting every published app: on devices ≥600dp — tablets, foldables, ChromeOS — apps can no longer lock screen orientation or restrict resizability. Since August 31, 2026, Google Play requires new apps and updates to target API 36 (extension available to November 1, 2026). Android 17 / API 37 removes the remaining opt-out.

An AI tool generating android:screenOrientation="portrait" or android:resizeableActivity="false" today is generating code that triggers App Compatibility warnings in Play Console, fails large-screen quality checks, and gets apps demoted in Play Store search results.

The business impact is not theoretical: Foldable users spend 14× more on apps than phone-only users. Tablet + phone users spend 9× more. FlipaClip saw 54% growth in tablet users within four months of going adaptive.

Kotlin Multiplatform went mainstream in 2025 — over 900 new KMP libraries published, Room added KMP support, companies now hire specifically for KMP skills. When a developer on a KMP project asks an AI tool to add database support, the AI generates Android-only Room code. It compiles. It runs perfectly on Android. The iOS build fails. The developer spends hours debugging before realizing the root cause: their AI tool does not know KMP exists.


🧩 What AndroJack Does

AndroJack is a documentation-grounded Android engineering MCP server. It gives your AI coding assistant 23 specialized tools that fetch live, verified answers from official Android and Kotlin sources — instead of predicting from stale training data.

It does not make the AI smarter. It makes the AI accountable to evidence.

Think of it as a pre-build linter for LLMs. While other tools retrieve documentation, AndroJack acts as a strict architectural gatekeeper.

Without AndroJack:  You ask → AI predicts from stale weights → Code (possibly wrong)

With AndroJack:     You ask → AI calls tool → Tool fetches official source live
                             → AI reads verified answer → Code (grounded)

⚠️ Honest Activation Model — Two Levels

IMPORTANT

This is the most important thing to understand before you install AndroJack.

Level

What's Active

What the AI Does

Level 1 — Tools only

23 tools registered in IDE

AI may call the right tool. Depends on the IDE and the AI's judgment.

Level 2 — Tools + Grounding Gate

23 tools + mandatory pre-generation rulebook

AI must call the correct tool for every decision before writing code.

Level 3 — Full loop-back

Level 2 + android_code_validator

AI validates every code block against 34 rules. Errors must be fixed before the user sees the code.

Level 1 is passive. The tools are available but the AI decides when to use them. An AI building a Compose screen may call architecture_reference but skip material3_expressive — and ship M3E violations silently.

Level 2 is active. The androjack_grounding_gate system prompt maps every task type to the correct tool. Building Compose UI? The AI is mandated to call material3_expressive first. Adding a dependency? It must call gradle_dependency_checker. No exceptions.

Level 3 is the loop-back. android_code_validator runs on every code block the AI generates before returning it to the user. 34 rules covering removed APIs, deprecated patterns, Android 16/17 compliance, and Compose-First migration signals. Comments are ignored, so a migration note like // replaced AsyncTask never triggers a false FAIL. Results come back as text and as structuredContent with an output schema. Verdict FAIL means the AI must fix and re-validate — the user never sees the broken code.

→ For full grounding, always activate Level 2 + Level 3. See Getting the Full Guarantee below.


🪲 What Can Still Break — Even at Level 3

IMPORTANT

AndroJack is a documentation-grounding and API-validation tool. It is not a Compose layout engine, a design system enforcer, or a runtime renderer. Level 3 catches removed APIs and deprecated patterns. It cannot catch every class of Android bug. This is not a limitation of AndroJack — it is a fundamental property of static text analysis applied to a visual, runtime-rendered UI framework.

The following bugs were encountered in a real Android app built with AndroJack at Level 2 (v1.4.0). They are documented here honestly so you know exactly what to watch for — and where to reach for different tools.

✅ What Level 3 Catches

// ❌ REMOVED — android_code_validator fires: REMOVED_ASYNCTASK
class MyTask : AsyncTask<Void, Void, String>()

// ❌ REMOVED — fires: REMOVED_TEST_COROUTINE_DISPATCHER
val dispatcher = TestCoroutineDispatcher()

// ❌ DEPRECATED — fires: DEPRECATED_CONTEXTUAL_FLOW_ROW
ContextualFlowRow { Text("hello") }

// ❌ LEAK — fires: GLOBALSCOPE_LAUNCH
GlobalScope.launch { fetchData() }

⚠️ What Level 3 Cannot Catch

WARNING

The following bugs were found in a real project. They are valid, API-current Compose code that violates design system constraints, accessibility minimums, or architectural boundaries. Static text scanning cannot detect them.

// Compiles and runs. Level 3 sees no violation.
// The bug: Text inside MultiChoiceSegmentedButtonRow truncates because a
// fixed height modifier prevents the Roboto Flex variable font from expanding.
MultiChoiceSegmentedButtonRow {
    SegmentedButton(/* fixed height modifier */) {
        Text("Light")
    }
}
NOTE

This is anabsence bug. The correct modifier is missing — no wrong one is present. Use visual testing or runtime inspection.

// Correct Material 3 API. Level 3 sees no violation.
// The bug: disabled state colours fail WCAG AA 4.5:1 contrast against surface.
Button(enabled = false, onClick = {}) {
    Text("INITIALIZE VAULT")
}
NOTE

This is aruntime visual property bug. Use paparazzi screenshot tests or Google's Accessibility Scanner.

// A missing try/catch produces no pattern match.
class VaultViewModel : ViewModel() {
    fun initializeVault() {
        viewModelScope.launch {
            val result = repository.initialize() // Missing try/catch
            _uiState.value = UiState.Success(result)
        }
    }
}
WARNING

UDF architecture violations require Detekt with custom rules or unit tests verifying exception mapping.


🗂️ Defence-in-Depth: The Right Tool for Each Bug Class

Bug Class

Real Example

Right Tool

Removed / deprecated API

AsyncTask, TestCoroutineDispatcher

✅ AndroJack Level 3

Android 16 violations

screenOrientation, resizeableActivity=false

✅ AndroJack Level 3

Android 17 violations

static final reflection, LAN without permission

✅ AndroJack Level 3

Architecture (flagged root)

GlobalScope leaking to UI

✅ AndroJack Level 3

Absent modifier / missing constraint

PH-UI-009 (innerPadding)

🔧 Android Lint / IDE inspector

Runtime contrast / colour failures

PH-UI-003 (WCAG)

🔧 paparazzi + Accessibility Scanner

Touch target violations

PH-UX-008

🔧 Accessibility Scanner

Architecture boundary (missing catch)

PH-AR-004 (stack trace to UI)

🔧 Detekt + ViewModel unit tests


🎯 The Killer Argument

"Can your agents.md file tell me the Gradle version that shipped last Tuesday?"

No markdown file can. No rules in .cursorrules can. No SKILL.md can.

✅ Only a live tool call can.

That's the job AndroJack exists to do — and nothing else in the current ecosystem does it for Android specifically.

What you need

agents.md / SKILL.md

AndroJack MCP

Format output a specific way

✅ Perfect

Works too

Follow team conventions

✅ Perfect

Works too

Latest Gradle version right now

❌ Guesses from memory

✅ Fetches live

Is AsyncTask removed?

❌ May be wrong

✅ Verified against SDK

Android 16 Play Store rules

❌ Unknown

✅ Official source

Prompt engineering controls how the AI responds. MCP controls what the AI knows.


✨ What AndroJack Covers — 23 Tools

#

Tool

What It Does

What Breaks Without It

1

🔍 search

Official doc excerpts — Google Developer Knowledge API (optional key) or a verified index of canonical pages

AI reasons from memory — possibly wrong today

2

⚠️ component

Deprecated/removed check on 40+ APIs

Compiles fine, breaks at runtime/review

3

📐 architecture

Guides for 40+ topics — MVVM, Nav3, MVI...

AI gives 2022 advice; misses Nav3

4

🐛 debugger

Parses stacktraces → official docs + Issue Tracker link

AI hallucinates fixes for known bugs

5

📦 gradle

Live lookup from Google Maven (highest stable, pre-release flagged) + BOM resolution

Stale Compose BOM, KAPT instead of KSP

6

📊 api-level

API 21–36 table, minSdk warnings

API 26+ calls in minSdk 21 apps

7

🎯 kotlin

10 patterns — coroutines, MVI, Compose state

GlobalScope.launch, runBlocking in UI

8

🎨 m3e

Material 3 Expressive components & Motion

M2 MaterialTheme in M3E app

9

🔐 permissions

40+ permissions rules & contracts

deprecated requestPermissions()

10

🧪 testing

Unit/Compose UI testing official patterns

Thread.sleep() in tests; missing Hilt

11

🏗️ build

R8, libs.versions.toml, signing, AAB

implementation instead of ksp

12

📱 large-screen

WindowSizeClass (5 breakpoints incl. Large/XL), Adaptive Scaffolds

Phone-only layouts on foldables and desktops

13

🚀 scalability

Paging 3, WorkManager, modularization

Naive loadAll(); unstable keys in lists

14

🧭 nav3

Nav3 (Nov 2025) — Scenes, migration

AI generates Nav2 dead-ends

15

✅ compliance

API 36 / Android 16 / 16 KB page size

Updates rejected — Play has required targetSdk 36 since Aug 31, 2026

16

🌐 kmp

Room KMP, Room 3 (stable, androidx.room3), Ktor, source sets

Android-only code in KMP projects

17

🤖 ondevice-ai

AICore, ML Kit Gen AI, Gemini Nano, AppFunctions (on-device MCP)

Cloud-only AI when offline is required

18

📋 policy

Play Store age-gating, billing openness, data safety

Apps rejected for unknown policy changes

19

🥽 xr

Android XR SDK, SpatialPanel, Orbiter

Works as 2D panel, misses spatial value

20

⌚ wear

Tiles, Health, M3 Expressive for Wear OS

Handheld patterns on round displays

21

🛡️ validator

Level 3 loop-back validation gate — 34 rules, structured output, also runs in CI

AI ships broken code without checking

22

🆕 api17

Android 17 / API 37 (stable) — static final, LAN, OTP, MessageQueue, native libs, Handoff

Apps crash on API 37 targets

23

🪪 dev-verification

Developer Verification Program — timeline, registration, CI/CD

Apps blocked from install on certified devices (enforced since Sept 30, 2026 in 4 countries)


🚀 Quick Start — Zero Install Required

npx -y androjack-mcp@2.1.0 install

Launches a full animated terminal wizard with auto-detection for VS Code, Cursor, Claude, Windsurf, JetBrains, Kiro, and Antigravity.

Option 2 — Targeted Installs

# Preview detected IDEs and config paths
npx -y androjack-mcp@2.1.0 install --list

# Auto-detect all
npx -y androjack-mcp@2.1.0 install --auto

# Install to a specific IDE
npx -y androjack-mcp@2.1.0 install --ide=cursor
npx -y androjack-mcp@2.1.0 install --ide=claude
npx -y androjack-mcp@2.1.0 install --ide=vscode
npx -y androjack-mcp@2.1.0 install --ide=windsurf
npx -y androjack-mcp@2.1.0 install --ide=jetbrains
npx -y androjack-mcp@2.1.0 install --ide=kiro
npx -y androjack-mcp@2.1.0 install --ide=antigravity

Option 3 — Test Without an IDE

npx -y @modelcontextprotocol/inspector npx -y androjack-mcp@2.1.0

Option 4 — Enforce the rules in CI (new in 2.1.0)

The same rule engine the agent is held to, run on every pull request — including code no agent touched:

npx -y androjack-mcp@2.1.0 validate app/src --target-sdk=37            # exit 1 on errors
npx -y androjack-mcp@2.1.0 validate . --format=sarif > androjack.sarif  # GitHub code scanning
# .github/workflows/androjack.yml
- run: npx -y androjack-mcp@2.1.0 validate . --target-sdk=37 --format=sarif > androjack.sarif || true
- uses: github/codeql-action/upload-sarif@v3
  with: { sarif_file: androjack.sarif }
- run: npx -y androjack-mcp@2.1.0 validate . --target-sdk=37   # fails the job on errors

Flags: --format=text|json|sarif, --target-sdk=N, --min-sdk=N, --fail-on=error|warning|never. Exit codes: 0 pass, 1 violations, 2 usage error or the scan could not check everything (no matching files, a file over 1 MiB, or the 20k-file cap) — a gate never passes on a partial scan.

Optional configuration

Variable

Effect

ANDROJACK_DEVELOPER_KNOWLEDGE_API_KEY

Use Google's Developer Knowledge API as the doc-search backend (full-text search over developer.android.com). Without it, AndroJack uses its verified index of canonical pages. Privacy: search queries — including exception messages from android_debugger — are sent to Google.

ANDROJACK_OFFLINE=1

Zero outbound requests — tools return canonical links only. For air-gapped setups.

ANDROJACK_HTTP_TOKEN

serve requires Authorization: Bearer <token>. Mandatory for remote binds when a Google API key is set.

ANDROJACK_ALLOW_REMOTE_HTTP=1

Same as serve --allow-remote; also applies to --http.

ANDROJACK_HTTP_STATELESS=1 / serve --stateless

No MCP sessions — each request is self-contained (load-balancer friendly).


🧩 Manual Config / Copy / Paste

If you prefer to wire the server manually, or want to inspect the exact JSON before writing anything:

  • Run npx -y androjack-mcp@2.1.0 install --list to preview detected IDEs and target config paths.

  • Ready-to-paste examples live in config/.

IDE / Client

Config file

Claude Desktop

config/claude_desktop_config.json

Cursor

config/cursor_mcp.json

VS Code / GitHub Copilot

config/vscode_mcp.json

Windsurf

config/windsurf_mcp.json

Android Studio / IntelliJ

config/jetbrains_mcp.json

AWS Kiro

config/kiro_mcp.json

Google Antigravity

config/antigravity_mcp.json

Every example keeps AndroJack local by default and runs the published package via npx -y androjack-mcp@2.1.0.


📍 The Ecosystem: AndroJack and Google's First-Party Agent Tools

Google now ships its own agent stack for Android. Being straight about the overlap:

Google Developer Knowledge MCP/API

Android CLI + Android skills + Knowledge Base

AndroJack MCP

Job

Retrieve docs (search, get, answer)

Run the toolchain; give agents task instructions; android docs search

Enforce: validate code, encode time-bound mandates, gate CI

Retrieval quality

Best available — Google's own index

Google's own index

Uses Google's API when you set a key; otherwise a verified index of canonical pages

Fails a build?

No

No (skills are advisory; android studio check needs Studio)

Yes — deterministic rule IDs, exit codes, SARIF

Setup

Google Cloud project + API key

Install the CLI

npx androjack-mcp@2.1.0 — no account

Where it runs

Remote (googleapis.com)

Local CLI

Local stdio / HTTP, works offline

Recommended setup: use Google's tools for retrieval and task skills, and AndroJack as the enforcement step — android_code_validator inside the agent loop and androjack-mcp validate in CI. AndroJack does not try to out-search Google's own documentation index. With ANDROJACK_DEVELOPER_KNOWLEDGE_API_KEY set, it uses that index.


🔒 Security & Privacy

Property

Implementation

Domain allowlist

Requests only to Google/Android/Kotlin official domains, default HTTPS port, no embedded credentials

Redirects re-validated

Every redirect hop is checked against the allowlist (2.1.0) — an allowlisted host cannot bounce a fetch elsewhere

Untrusted-content boundary

All fetched text is normalized, scrubbed of injection patterns and spoofed boundary tags, and wrapped as untrusted before it reaches the agent

HTTPS only

Outbound documentation fetches refuse non-HTTPS URLs, cap body size, and redact query strings in retry logs

Local by default

serve binds to loopback only unless you explicitly pass --allow-remote

HTTP hardening

Origin/Host validation, body cap, session cap with idle eviction, optional bearer token, stateless mode

Transparent agent

User-Agent: AndroJack-MCP/2.1.0

Read-only

All 23 tools annotated readOnlyHint: true, destructiveHint: false, idempotentHint: true

Credentials

None required. The optional Google API key is sent only as a header, never in URLs or logs

Offline mode

ANDROJACK_OFFLINE=1 guarantees zero outbound requests

Security policy

Disclosure process and supported versions in SECURITY.md


📋 Changelog

v2.1.0 — Fix what didn't work, harden what did, enforce in CI

  • Doc search actually returns docs. v2.0 scraped client-rendered search pages and returned no documentation for any query. 2.1 uses Google's Developer Knowledge API (optional key) or a verified index of canonical pages.

  • Security: redirect allowlist bypass closed; all fetched content now goes through the untrusted-content boundary (v2.0 claimed this but only one tool did it); boundary-tag spoofing and zero-width/full-width evasion fixed; HTTP session-exhaustion DoS fixed; bearer auth and stateless mode; 7 dependency vulnerabilities (1 critical) patched.

  • No more confident wrong answers: Row → "DEPRECATED", Task → "REMOVED" registry false positives fixed; Android 17 games exemption corrected; fabricated Handoff API removed; Room 3 is stable (was described as alpha); Google Maven alphas no longer labelled "Latest Stable"; 19 dead documentation links replaced.

  • Validator: comments ignored (ends agent fix-loops), Kotlin DSL kapt(...) detected, API 37 thresholds corrected, 6 new Android 17 rules (34 total), structured output.

  • New: androjack-mcp validate CLI (text/JSON/SARIF) for CI; MCP resources for the rule catalogue; full tool annotations; AppFunctions guidance; Android Studio Rabbit 1 / AGP 9.4.

  • Lower token cost: tools/list ~28.5 KB → ~20.5 KB; repeated identical results in a session are replaced by a short pointer (pass refresh: true to get them again).

  • Tests: 85 → 196 (+1 opt-in live), including a 17-scenario black-box UAT suite driven through the real MCP SDK client. See test/uat/UAT_PLAN.md.

Full details: CHANGELOG.md.

v2.0.0 — Security Hardening, Compose-First, Developer Verification

  • Content sanitizer for indirect prompt injection — src/content-sanitizer.ts neutralizes structural injection patterns (fake role markers, instruction-reset framing) in any externally-fetched text before it reaches the calling agent's context. android_debugger results from issuetracker.google.com — the only allowlisted domain indexing free-text, user-submitted content — are wrapped in an explicit untrusted-data boundary.

  • Dependency vulnerabilities patched — resolved 7 vulnerabilities (3 high) in transitive undici/qs via a cheerio update. Zero breaking changes, 0 vulnerabilities in the shipped tree.

  • Tool 23: android_developer_verification — Google's developer verification program enforces from September 30, 2026 (Brazil, Indonesia, Singapore, Thailand first; global 2027). Covers registration paths, timeline, enterprise exemptions, and CI/CD bulk-registration APIs.

  • Compose-First platform shift reflected — as of May 19, 2026, Android UI development is officially Compose First; View-based patterns (Fragments, RecyclerView, ViewPager) are flagged as maintenance-mode wherever queried, sourced directly from Google's own announcement rather than left silently outdated.

  • Compose 1.11 v2 Testing Framework — full migration guide for the new default StandardTestDispatcher behavior, plus a validator rule (UNCONFINED_DISPATCHER_COMPOSE_TEST) that flags the old assumption.

  • Navigation 3 Scene Decorators (1.1) — persistent chrome (bottom bars, rails, dialogs) without per-screen awareness.

  • Android Studio codename corrected — was two full codenames stale ("Panda 2"). Now correctly reflects Quail (2026.1.x) as current stable, AGP 9.2.0.

  • Android Skills positioning — documents Google's first-party Android Skills/CLI (April 2026) and positions AndroJack's validator as the complementary post-generation enforcement gate, not a competing retrieval layer.

  • 28 validator rules (was 26) — added UNCONFINED_DISPATCHER_COMPOSE_TEST and NEW_FRAGMENT_CLASS_COMPOSE_FIRST.

  • Fabricated version numbers removed — a prior session's dependency version catalog example asserted several unverified version numbers. Replaced with only-confirmed values plus explicit CHECK_LIVE_VIA_gradle_dependency_checker placeholders.

  • Full version sync — closed a gap where src/version.ts had been bumped without propagating to package.json, all IDE config files, and manifest files — now enforced as a release checklist item.

v1.7.1 — Engineering Hardening & Community Parity

  • 54-Test Coverage — Implemented comprehensive unit and contract tests for validator rules, HTML parser, LRU cache, and HTTP security layer.

  • Discovery Parity — Fixed /.well-known/mcp endpoint to correctly report tools: 22.

  • Dependency Sanitization — Removed node-fetch (migrated to native fetch) and pruned stale overrides for a cleaner supply chain.

  • Rule Hardening — Improved Compose component detection for NavHost and BottomAppBar.

  • URL Remediation — Fixed broken documentation anchors for Android 17 ACCESS_LOCAL_NETWORK and handoff.

v1.7.0 — Android 17 / API 37 Support

  • Tool 22: android_api17_compliance — Full reference for Android 17 platform stability (March 26, 2026).

  • Validator rule expansion — (Corrected in 2.1.0: these notes originally claimed 31 rules, including Room 3.0 and ACCESS_LOCAL_NETWORK checks that never shipped. The real count was 26 → 28 in 2.0.0 and 34 in 2.1.0.)

  • WindowManager 1.5.0 — Added Large (1200dp) and Extra-large (1600dp) breakpoints and layout patterns.

  • Room 3.0 alpha — Support for modern SQLiteDriver migration paths.


👥 Authorship & Ownership

Vikas Sahani — Product Lead (vikassahani17@gmail.com)
Claude AI — AI Engineering Lead


MIT License © 2026 Vikas Sahani | SECURITY.md

Built because 35% of Stack Overflow visits in 2025 are developers debugging AI-generated code.
AndroJack exists so none of those visits are yours.

Available Tools

23 tools
android_api17_complianceAndroid 17 / API 37 ComplianceC
Read-onlyIdempotent

Android 17 / targetSdk 37 breaking changes: static final reflection, ACCESS_LOCAL_NETWORK, SMS OTP delay, large-screen opt-out removed (games exempt), lock-free MessageQueue, read-only System.load, NPU declaration, Handoff. Topics: overview, checklist, static final, local network, sms otp, large screen, messagequeue, npu, handoff.

ParametersJSON Schema
NameRequiredDescriptionDefault
topicNoTopic: 'overview', 'checklist', 'static final', 'local network', 'sms otp', 'large screen', 'messagequeue', 'npu', 'handoff'
refreshNoResend content already sent in this session

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint=false and destructiveHint=false, so safety is fully covered externally. The description adds nothing behavioral — no indication of content depth, session-caching behavior, or what happens when an unknown topic is passed — so it clears the (lower) annotated bar only barely.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One compact sentence plus a topic list, with the version and breaking-change scope front-loaded. It is efficient, though the trailing topic enumeration is partly redundant with the schema and could have carried routing guidance instead.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only, zero-required-parameter reference tool with no output schema, the description is minimally sufficient but leaves gaps: it doesn't say what a call returns (migration steps, checklist items, doc links) or how large the payload is, which matters for a topic-driven knowledge tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the topic list in the description merely duplicates the enum-style list already in the topic parameter's schema description. With the schema doing all the work, the baseline 3 is appropriate; the description adds no syntax or selection guidance beyond it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the subject matter (Android 17 / targetSdk 37 breaking changes) and enumerates its coverage areas, so an agent can infer it is a version-specific compliance reference. However, it never states the action or output form — no verb such as 'returns' or 'explains' — and differentiation from android_api36_compliance rests entirely on the version number, not on any stated scope difference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance at all: nothing says whether to consult this before upgrading targetSdk, nor how it relates to android_api36_compliance, android_api_level_check, or android_official_search. An agent must guess which compliance/reference sibling is appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

android_api36_complianceAndroid 16 / API 36 Compliance CheckerB
Read-onlyIdempotent

Android 16 / targetSdk 36 (required by Play for new apps and updates since Aug 31, 2026): orientation and resizability locks are ignored on ≥600dp; predictive back; 16 KB pages. Topics: compliance, layouts, checklist, predictive back, page size.

ParametersJSON Schema
NameRequiredDescriptionDefault
topicNoTopic: 'compliance', 'layouts', 'checklist', 'predictive back', 'page size'
refreshNoResend content already sent in this session

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds domain substance (orientation/resizability locks ignored on ≥600dp, predictive back, 16 KB pages) but says nothing about how content is returned per topic or that 'refresh' resends session content beyond the schema's own wording.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is compact and front-loads the compliance requirement, but the trailing 'Topics: compliance, layouts, checklist, predictive back, page size' duplicates the schema's topic parameter nearly verbatim, so that sentence does not earn its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and no annotations gap, the description should clarify what the tool returns (static guidance text per topic? a checklist?) and how refresh interacts with it. It omits that, leaving an agent unsure of the response shape for a two-parameter tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters are fully documented in the schema, establishing the baseline of 3. The description restates the same topic list already present in the schema enum, adding no new semantics (e.g., what happens with no topic, or default behavior).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific resource and scope (Android 16 / targetSdk 36 compliance), and the name dates it against the sibling android_api17_compliance. The action is implicit rather than stated as a verb — it reads as a topic-based lookup rather than a 'checker' — but an agent can tell what it retrieves.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives useful context ('required by Play for new apps and updates since Aug 31, 2026') that implies when the tool matters, but it never states when to use this versus overlapping siblings like android_play_policy_advisor, android_large_screen_guide, or android_api_level_check. Usage must be inferred.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

android_api_level_checkAndroid API Level ReferenceA
Read-onlyIdempotent

Map an API level, version name, or codename to features and minSdk warnings. Pass 'all' for the full table.

ParametersJSON Schema
NameRequiredDescriptionDefault
api_level_or_nameYesAPI level number (e.g. '26'), version name (e.g. 'Android 14'), codename (e.g. 'Tiramisu'), or 'all'.

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds useful context by naming the returned content (features, minSdk warnings) and the bulk 'all' mode, but does not expand on output format or scope of the feature data.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the core action and followed by a concrete special-case instruction. No filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter, read-only lookup with no output schema, the description conveys enough: what gets mapped and what is returned. It stops short of describing the shape or volume of the feature/warning results, which is the only remaining gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% for the single required parameter, so the schema already documents accepted formats. The description only echoes the 'all' option and clarifies that it yields the full table, a marginal add beyond the enum-less schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (map) and resources (API level, version name, codename) plus the outputs (features, minSdk warnings), so the tool's job is unambiguous. It does not, however, distinguish itself from closely related siblings such as android_api36_compliance or android_api17_compliance, which also concern API levels.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Pass "all" for the full table' gives one concrete usage cue, and the mapping framing implies a reference-lookup use case. There is no explicit when-to-use/when-not guidance or pointer to the compliance siblings that could compete for the same request.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

android_build_and_publishAndroid Build & Publish GuideB
Read-onlyIdempotent

Build and release reference: R8/ProGuard, version catalogs, kapt→KSP, signing, AAB/Play publishing, Baseline Profiles, current Android Studio/AGP, Google's Android CLI and skills.

ParametersJSON Schema
NameRequiredDescriptionDefault
topicNoBuild topic. E.g. 'r8', 'proguard', 'version catalog', 'ksp', 'signing', 'baseline profiles'. Leave empty to list all.
refreshNoResend content already sent in this session

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint=false, and destructiveHint=false, so the safety profile is fully covered. The description itself adds no behavioral context beyond that — no note on session state, caching, or return behavior. The one behavioral nuance (that content is normally not resent) lives only in the refresh parameter description, not here.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence that opens with the core purpose and then lists scope. It is efficient, though the trailing keyword dump ('Google's Android CLI and skills') reads more like tag-stuffing than structured guidance.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a reference-lookup tool with rich annotations, no output schema, and fully documented parameters, the description is adequate: an agent knows what topics it covers and that it is a safe, idempotent read. Nothing critical is missing, though routing context versus sibling reference tools is thin.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so both parameters are already documented in the schema. The description's topic list loosely overlaps the topic parameter examples but adds no syntax, format, or matching semantics beyond what the schema provides — baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific resource ('Build and release reference') and enumerates concrete content areas (R8/ProGuard, version catalogs, kapt→KSP, signing, AAB/Play publishing, Baseline Profiles). This distinguishes it from most siblings, though it does not explicitly separate itself from overlap candidates like android_official_search or gradle_dependency_checker.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: the topic list suggests when the reference is relevant (build/release questions), but there is no explicit when-to-use guidance and no named alternatives. The agent must infer routing from the topic keywords alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

android_code_validatorAndroid Code ValidatorA
Read-onlyIdempotent

Call after generating every Android code block, before returning it. Checks Kotlin, XML, and Gradle against 34 rules (removed/deprecated APIs, Android 16/17 behaviour, coroutine misuse, kapt). Returns PASS/WARN/FAIL with line-level fixes and doc links, plus structuredContent. Comments are ignored. On FAIL, fix and re-run.

ParametersJSON Schema
NameRequiredDescriptionDefault
codeYesThe code block to validate
minSdkNoApp minSdk (e.g. 24)
languageNoFile type — auto-detected from content if omitted
targetSdkNoApp targetSdk (e.g. 37)

Output Schema

ParametersJSON Schema
NameRequiredDescription
countsYes
minSdkYes
verdictYes
languageYes
targetSdkYes
violationsYes
rulesEvaluatedYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, and the description adds real value beyond them: the 34-rule coverage areas, PASS/WARN/FAIL outcome shape, line-level fixes with doc links, structuredContent, and that comments are ignored. It omits any limits on code size or rate behavior, keeping it below 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Five short sentences, each carrying distinct information: when to call, what is checked, what is returned, an edge case, and remediation. The call timing is front-loaded with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return values need not be spelled out, yet the description still summarizes the PASS/WARN/FAIL contract. Call timing, scope, language coverage, and remediation loop are all present, leaving nothing an agent needs missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents code, minSdk, targetSdk and language (including its enum). The description repeats the language set but adds no syntax or format detail about minSdk/targetSdk, so the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb (validate/check) applied to a clearly bounded resource (Kotlin, XML and Gradle code blocks) with an explicit scope of 34 rules. It is easily distinguished from siblings such as gradle_dependency_checker or android_component_status, which serve different purposes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit trigger ('call after generating every Android code block, before returning it') and a follow-up loop ('on FAIL, fix and re-run'). It does not name alternative validation tools (e.g. gradle_dependency_checker) or state when not to use it, so it falls short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

android_component_statusAndroid Component Status ValidatorA
Read-onlyIdempotent

Is an Android/Kotlin class or library stable, deprecated, or removed? Call before using any android., androidx. or kotlin.* API. Returns status, replacement, and doc link; unknown names are reported as unconfirmed, never guessed.

ParametersJSON Schema
NameRequiredDescriptionDefault
component_nameYesFull or short class name to validate. E.g. 'AsyncTask', 'android.widget.ProgressDialog', 'LiveData'.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, openWorld), so the bar is lower. The description adds genuinely useful behavior: it discloses the return contents (status, replacement, doc link) and, importantly, that unknown names are 'reported as unconfirmed, never guessed' — a non-obvious reliability guarantee beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tightly written sentences, front-loaded with the core question, followed by the call condition and return/edge-case behavior. Every clause earns its place with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description correctly takes on the burden of describing what comes back (status, replacement, doc link) and how ambiguous inputs behave. For a single-input validation tool, nothing an agent needs to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single parameter is documented with concrete examples ('AsyncTask', 'android.widget.ProgressDialog', 'LiveData'). The description adds no additional parameter semantics, so the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource — validating whether an Android/Kotlin class or library is stable, deprecated, or removed — and does so as a crisp question an agent can match against a need. It is clearly distinct from search/general-knowledge siblings like android_official_search because it returns a lifecycle verdict rather than documents.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit when-to-use guidance: 'Call before using any android.*, androidx.* or kotlin.* API.' That is a clear triggering condition. It does not name an alternative sibling or state exclusions, so it falls short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

android_debuggerAndroid Error DebuggerA
Read-onlyIdempotent

Parse an Android/Kotlin stacktrace and return the error class, matching official docs, and an Issue Tracker search link. Paste the exception line and 'at' frames.

ParametersJSON Schema
NameRequiredDescriptionDefault
refreshNoResend content already sent in this session
stacktraceYesFull Android/Kotlin stacktrace or exception text. Include the exception class and 'at' frames.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, openWorld), so the bar is lower. The description adds genuinely useful behavior beyond the structured fields: it discloses that the tool performs doc-matching and constructs an Issue Tracker search link, which is real output behavior given no output schema exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with zero filler. The purpose and outputs come first, followed by the one actionable input instruction, so nothing needs to be re-read.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only parse tool with full schema coverage and no output schema, the description is nearly sufficient: it explains what is returned and what input to supply. It stops short of covering limits (the 4000-char cap is only in the schema) or what happens on an unparseable stacktrace, but the core need is met.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters are already documented in the schema, including the refresh flag the description never mentions. The description's restatement of the stacktrace content ('include the exception class and at frames') duplicates the schema text rather than adding format or syntax guidance, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Parse an Android/Kotlin stacktrace') and enumerates the outputs (error class, matching official docs, Issue Tracker link), so the agent knows exactly what the tool produces. It does not, however, reference or distinguish itself from the large set of sibling guide/search tools, so differentiation is left implicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: 'Paste the exception line and "at" frames' tells the agent the input format but not the situations that select this tool over alternatives like android_official_search. There are no exclusions or named alternatives, so the agent must infer when to reach for it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

android_developer_verificationAndroid Developer Verification ProgramB
Read-onlyIdempotent

Android developer verification (identity check; enforced since Sept 30, 2026 in BR/ID/SG/TH, global 2027): who is affected, registration paths, enterprise exemptions. Topics: overview, timeline, registration, enterprise, studio.

ParametersJSON Schema
NameRequiredDescriptionDefault
topicNoTopic: 'overview', 'timeline', 'registration', 'enterprise', 'studio'
refreshNoResend content already sent in this session

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare a safe, read-only, idempotent, non-open-world lookup, so the safety profile is covered. The description adds useful domain context (identity-check program, enforcement window, exempted categories), but says nothing about what a call returns (content chunks vs. summary), caching, or how 'refresh' behaves beyond the schema line.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One tight, front-loaded sentence plus a short topic list; no filler and the identifying information comes first. The parenthetical dates and regions are dense but relevant and earn their place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description carries the burden of explaining the return, and it does not (no format, granularity, or size indication). For a policy-information tool with all-optional parameters and full annotation coverage, this is adequate but leaves the agent guessing about the shape of the result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and both parameters are documented there, so the baseline is 3. The description's topic list simply restates the schema's topic values and adds no extra meaning about semantics, defaults, or behavior when topic is omitted.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific resource (the Android Developer Verification program) and enumerates the sub-topics it can answer ('who is affected, registration paths, enterprise exemptions'). An agent can tell it is a documentation/knowledge tool about a specific policy program. It stops short of naming a sibling it is distinct from, so it is not a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: the topic list hints at what this tool is good for, but there is no explicit when-to-use or when-not, and no routing against closely related siblings such as android_play_policy_advisor or android_official_search. The agent must infer the boundary itself.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

android_kmp_guideKotlin Multiplatform (KMP) GuideA
Read-onlyIdempotent

Kotlin Multiplatform reference: project setup, KMP libraries (Ktor not Retrofit, Koin not Hilt in commonMain), Room KMP and Room 3, expect/actual. Topics: overview, libraries, room, ktor, expect actual, gradle.

ParametersJSON Schema
NameRequiredDescriptionDefault
topicNoTopic: 'overview', 'libraries', 'room', 'ktor', 'expect actual', 'gradle'
refreshNoResend content already sent in this session

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds only the topical scope; it says nothing about how content is chunked or returned, and the session-dedup behavior is disclosed in the schema (refresh), not here.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single compact passage with the core purpose front-loaded and the topic list trailing as supporting detail. The trailing list is mildly redundant with the schema but does not bloat the text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only reference tool with no output schema and full schema coverage on both params, the description covers what the tool is and what it spans. Only the shape of the returned guidance is unspecified, a minor gap given the annotations carry the safety profile.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and both parameters are fully documented in the schema, so the baseline is 3. The description merely repeats the topic list already present in the schema and adds no syntax, formatting, or default-value nuance for 'refresh'.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific resource (Kotlin Multiplatform reference) and enumerates its scope: project setup, KMP libraries, Room KMP/Room 3, expect/actual. It implicitly distinguishes itself from generic siblings like kotlin_best_practices by scoping to KMP, but never names an alternative explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The topic list implies when the tool is relevant, but there is no explicit 'use this when...' guidance, no exclusions, and no routing advice against siblings such as android_official_search or kotlin_best_practices. Usage must be inferred from the topic enumeration.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

android_large_screen_guideAndroid Large Screen & Adaptive Layout GuideA
Read-onlyIdempotent

Large-screen/tablet/foldable reference: WindowSizeClass, NavigationSuiteScaffold, ListDetailPaneScaffold, hinge handling, continuity, Play large-screen quality checklist.

ParametersJSON Schema
NameRequiredDescriptionDefault
topicNoTopic. E.g. 'windowsizeclass', 'NavigationSuiteScaffold', 'ListDetailPaneScaffold', 'foldable'. Leave empty for index.
refreshNoResend content already sent in this session

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so safety and repeatability are covered structurally. The description adds the content scope but says nothing about return format, caching, or how 'refresh' changes session behavior — some value, but thin beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence listing scope in compact noun-phrase form — efficient with no filler. It is arguably a bare list rather than prose, but every element earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only reference tool with no output schema, annotations carrying the safety profile, and full schema coverage, the description conveys enough scope to call it correctly. Only minor gaps remain (no sibling routing, no return-shape hint).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters are already documented, including the 'leave empty for index' behavior of topic. The description's topic list loosely echoes the topic parameter examples but adds no format or matching semantics beyond the schema. Baseline 3 applies when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific resource — an Android large-screen/tablet/foldable reference — and enumerates the concrete topics it covers (WindowSizeClass, NavigationSuiteScaffold, ListDetailPaneScaffold, hinge handling, continuity, Play checklist). An agent can tell it is a topical reference tool, though it does not explicitly distinguish itself from siblings like android_scalability_guide or android_official_search.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: the agent infers it should query this for large-screen/adaptive-layout questions. There is no explicit when-to-use, when-not-to-use, or routing to a sibling (e.g. android_official_search for general Android docs), and the 'Leave empty for index' hint lives in the schema rather than guiding tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

android_navigation3_guideAndroid Navigation 3 GuideA
Read-onlyIdempotent

Navigation 3 reference (current official library). Call before any navigation code — do not generate Navigation 2 NavController/NavHost for new projects. Topics: overview, migration, scenes, testing, backstack, key.

ParametersJSON Schema
NameRequiredDescriptionDefault
topicNoNavigation topic: 'overview', 'migration', 'scenes', 'testing', 'backstack', 'key'
refreshNoResend content already sent in this session

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive, and closed-world, so safety is covered. The description adds genuine behavioral context beyond that: an ordering constraint (invoke before writing code) and a versioning rule (N3 is current, don't emit N2 code). It does not describe the shape of returned content, which keeps it short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short clauses, front-loaded with the resource identity followed by the action constraint, then the topic index. No filler sentences and nothing that could be trimmed without losing meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-required-parameter read tool with no output schema and full schema coverage, the description covers purpose, timing, and available topics adequately. It could note what the returned content looks like (e.g., reference docs vs. code samples), but nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and both parameters are documented there, so the baseline is 3. The description's topic list duplicates the schema's topic enumeration and adds no syntax or selection guidance beyond it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific resource ('Navigation 3 reference') with an explicit version scoping cue ('current official library'), which cleanly distinguishes it from Navigation 2 material and from siblings like android_official_search. An agent immediately knows this returns N3 reference content.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit trigger ('Call before any navigation code') and an explicit prohibition ('do not generate Navigation 2 NavController/NavHost for new projects'), which is stronger guidance than most sibling tools provide. Alternatives aren't named, but the when/when-not conditions are unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

android_ondevice_aiAndroid On-Device AI / AICore GuideB
Read-onlyIdempotent

On-device AI: AICore / Gemini Nano via ML Kit GenAI, ML Kit, repository pattern for on-device vs cloud, and AppFunctions (expose app functions to agents; experimental). Topics: overview, setup, smart reply, ml kit, appfunctions.

ParametersJSON Schema
NameRequiredDescriptionDefault
topicNoTopic: 'overview', 'setup', 'smart reply', 'ml kit', 'architecture', 'appfunctions'
refreshNoResend content already sent in this session

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, so the safety profile is covered externally. The description adds only a small behavioral detail (AppFunctions is 'experimental'); it does not disclose return format, caching, or pagination behavior on top of the schema's refresh parameter.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact sentences that front-load the subject matter and then the topic set, with no filler. The trailing 'Topics:' enumeration is slightly redundant with the schema but still helps scanning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only, closed-world, zero-required-parameter guide tool with full schema coverage and no output schema, the description is sufficient to invoke it. It is incomplete on a key point: why an agent should pick this over android_official_search or the other topical guides.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters are documented in the schema, giving a baseline of 3. The description reinforces the topic options but also omits 'architecture', which the schema topic description lists, creating a minor mismatch that could steer topic selection.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific subject area (on-device AI: AICore/Gemini Nano via ML Kit GenAI, ML Kit, repository pattern, AppFunctions) and enumerates the covered topics, so an agent knows what content it returns. It lacks an explicit verb ('get guide for') and does not differentiate itself from siblings like android_official_search or the other *_guide tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no statement of when to use this tool versus alternatives such as android_official_search or android_kmp_guide. The topic list implies coverage, but no condition, prerequisite, or routing guidance is given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

android_permission_advisorAndroid Permission AdvisorA
Read-onlyIdempotent

Permission reference: type, runtime-request need, Play restrictions, and the request pattern. Call before adding . Query 'runtime pattern' for request code; empty lists all.

ParametersJSON Schema
NameRequiredDescriptionDefault
refreshNoResend content already sent in this session
permissionNoPermission name (e.g. 'CAMERA', 'POST_NOTIFICATIONS'). Leave empty to list all. Query 'runtime pattern' for request code.

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint/idempotentHint true, so the agent knows this is a safe, repeatable lookup; the description correctly does not contradict that. It adds the useful fact that an empty query lists all permissions and that 'runtime pattern' is a magic query term. It still says nothing about the shape/volume of the returned data, which matters since there is no output schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences with the purpose front-loaded and the usage trigger immediately after; nothing is padded. The final clause largely duplicates what the parameter schema already says, a minor redundancy rather than bloat.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter reference lookup with a full read-only annotation set, the description covers purpose, trigger, and query modes adequately. The remaining gap is the absence of any hint about return contents/format, which is more notable because no output schema exists to cover it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters are already documented in the schema, including the 'leave empty to list all' and 'runtime pattern' behaviors. The description restates those same facts rather than adding format, case-sensitivity, or validity guidance, so it earns the baseline 3 with no uplift.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific resource (Android permission reference) and enumerates exactly what it returns: type, runtime-request need, Play restrictions, and request pattern. That is far more concrete than a generic 'get info' tool. However, it never distinguishes itself from the closely related sibling android_play_policy_advisor, which plausibly covers overlapping Play-restriction territory.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear trigger condition: 'Call before adding <uses-permission>.' That tells the agent exactly when to reach for it. It does not name alternatives or state when another sibling (e.g. android_play_policy_advisor) is the better pick, so it stops short of explicit when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

android_play_policy_advisorGoogle Play Store Policy AdvisorA
Read-onlyIdempotent

Play policy reference: target API requirement, Restrict Minor Access, subscription transparency, restricted permissions and Data Safety, large-screen quality. Call before Play submission or new monetization.

ParametersJSON Schema
NameRequiredDescriptionDefault
topicNoTopic: 'overview', 'subscriptions', 'restrict minor access', 'permissions', 'large screen quality'
refreshNoResend content already sent in this session

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive, closed-world behavior, so the safety profile is covered. The description adds that this is a reference/advice tool and that it should precede submission, but says nothing about what the advice contains or how the refresh flag changes session behavior beyond the schema field's own text.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the resource and followed by the trigger condition. The topic list is somewhat long but each item maps to real coverage; nothing is padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple, zero-required-parameter, read-only reference tool with full schema coverage and complete annotations, the description supplies the needed purpose and timing. The only minor omission is any hint at output shape (e.g., checklist vs citations), which is not critical for an advisory tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both the topic list and the refresh semantics are already documented in the schema. The description's topic enumeration largely restates the schema's topic examples without adding format or default-substitution guidance. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific resource (Play Store policy reference) and enumerates the concrete domains it covers: target API requirement, Restrict Minor Access, subscription transparency, permissions/Data Safety, large-screen quality. An agent can tell this apart from generic siblings like android_component_status, though it does not explicitly distinguish itself from android_permission_advisor or android_api36_compliance, which overlap on permissions and API level.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides an explicit trigger: 'Call before Play submission or new monetization.' That is a clear when-to-use signal. It stops short of when-not to use it or naming the overlapping permission/API-compliance siblings as alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

android_scalability_guideAndroid Scalability Architecture GuideC
Read-onlyIdempotent

Scale patterns: Paging 3 + RemoteMediator, offline-first sync (WorkManager + Room), HTTP caching, cold start, modularization, Compose recomposition performance.

ParametersJSON Schema
NameRequiredDescriptionDefault
topicNoTopic. E.g. 'Paging3', 'offline-first', 'cold start', 'modularization', 'recomposition'. Leave empty for index.
refreshNoResend content already sent in this session

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=false, and destructiveHint=false, so the safety profile is fully covered elsewhere. The description adds nothing behavioral: it doesn't say whether content is cached, how 'refresh' affects session state beyond the schema note, or how large/responsive the responses are.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One compact sentence, front-loaded with the highest-value keywords and no filler. It is appropriately sized for a lookup tool, though the fragmentary keyword-list style means it carries less information per token than a declarative sentence would.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description should clarify what comes back (explanatory guidance, snippets, references) and how to scope a query; it only enumerates topics. For a zero-required-parameter retrieval tool this is minimally adequate but leaves the agent guessing about response shape and granularity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline is 3. The topic list in the description does echo and expand the schema's example values ('Paging3', 'offline-first', 'cold start', 'modularization', 'recomposition'), giving the agent a rough taxonomy of valid topics, but adds no syntax, normalization, or fallback behavior beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description is a bare topic list ('Paging 3 + RemoteMediator, offline-first sync, HTTP caching, cold start, modularization, Compose recomposition performance') with no verb stating what the tool actually does — retrieve guidance, generate code, or explain trade-offs. It does usefully differentiate from siblings by domain coverage (scalability/performance vs. android_navigation3_guide or material3_expressive), but the agent must infer the operation from the name and title.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance at all: nothing says when this beats architecture_reference, kotlin_best_practices, or android_official_search for the same subject matter. The only usage cue is the schema-level note that omitting 'topic' returns an index, which is not restated or contextualized in the description.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

android_testing_guideAndroid Testing GuideA
Read-onlyIdempotent

Testing reference: unit tests (JUnit4, MockK, Turbine, coroutines-test), Compose UI tests, Espresso, ViewModel and Room tests, Hilt testing, test pyramid. Call before writing tests.

ParametersJSON Schema
NameRequiredDescriptionDefault
topicNoTesting topic. E.g. 'unit tests', 'compose testing', 'espresso', 'hilt testing', 'pyramid'. Leave empty to list all.
refreshNoResend content already sent in this session

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the agent knows this is a safe, repeatable lookup with no side effects. The description adds the pre-test-writing trigger but says nothing about caching/deduplication behaviour, and the session-scoped 'refresh' semantics live only in the schema. Adequate against the annotation baseline, but not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences: a front-loaded purpose statement followed by the invocation trigger. The parenthetical library names earn their space by signalling coverage depth, and there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter, read-only lookup with no output schema, the description supplies the content domains and the call trigger, which is close to enough. The remaining gap is return shape and the purpose of `refresh` in cross-session reuse, but that is minor for a reference tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3, but the description goes beyond the schema's example values by naming topics the schema omits (ViewModel and Room tests, Compose UI tests, JUnit4/MockK/Turbine), which directly informs what strings are valid for `topic`. That is genuine added meaning for the primary parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific resource (a testing reference) and enumerates the exact domains it covers — unit tests, Compose UI tests, Espresso, ViewModel/Room, Hilt, test pyramid — so an agent knows precisely what knowledge it returns. It stops short of explicitly differentiating itself from near-neighbours such as kotlin_best_practices or android_code_validator, which is the only thing keeping it off a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Call before writing tests' is an explicit, actionable trigger condition, which is more than most reference tools offer. There are, however, no exclusions — nothing says when to reach for android_code_validator or kotlin_best_practices instead, so the routing guidance is one-sided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

android_wearos_guideWear OS Developer GuideA
Read-onlyIdempotent

Wear OS reference — uses different Compose artifacts than phones (ScalingLazyColumn, SwipeDismissableNavHost, Wear Material 3). Covers Tiles and Health Services. Topics: overview, compose, tiles, health services, navigation.

ParametersJSON Schema
NameRequiredDescriptionDefault
topicNoTopic: 'overview', 'compose', 'tiles', 'health services', 'navigation'
refreshNoResend content already sent in this session

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered. The description adds content-scope context (which topics exist, and that Wear-specific Compose APIs differ from phone ones), but says nothing about return volume, versioning, or caching behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences, front-loaded with the resource and the key differentiation fact. The trailing topic list is slightly redundant with the schema enum, which keeps it from a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only documentation lookup with no output schema, the description tells the agent what domain and subtopics are covered and that the guidance is Wear-specific, which is enough to call it correctly. Annotations carry the safety profile, so nothing critical is missing, though version applicability is unstated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters are already documented in the schema. The description's 'Topics:' list merely restates the topic parameter's enum values and says nothing extra about 'refresh' or about what a given topic returns. Baseline 3 applies when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific resource (Wear OS reference) and pins down its scope with concrete API names (ScalingLazyColumn, SwipeDismissableNavHost, Wear Material 3) plus covered areas (Tiles, Health Services). It is clearly distinguishable from sibling guides like android_large_screen_guide or android_navigation3_guide by domain, though it never explicitly names them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied — 'uses different Compose artifacts than phones' hints this is for Wear OS targets rather than phone UI, but there is no explicit when-to-use, when-not-to-use, or named alternative. The baseline for the topic argument is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

android_xr_guideAndroid XR Developer GuideA
Read-onlyIdempotent

Android XR / Jetpack XR reference (Compose for XR beta, SceneCore and ARCore RC): SpatialPanel, UserSubspace, Orbiter, ARCore for XR, shipping one app for XR and non-XR. Topics: overview, setup, spatial ui, arcore, compatibility.

ParametersJSON Schema
NameRequiredDescriptionDefault
topicNoTopic: 'overview', 'setup', 'spatial ui', 'arcore', 'compatibility'
refreshNoResend content already sent in this session

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered elsewhere. The description adds genuine context beyond that — that the content covers beta/RC releases (Compose for XR beta, ARCore RC) — which matters for an agent judging freshness, but it says nothing about content size or staleness.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Compact and front-loaded, leading with scope before the topic enumeration. The topic list is duplicated between the first parenthetical and the trailing 'Topics:' clause, which is minor redundancy rather than bloat.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

A read-only, low-complexity reference tool with two fully documented parameters and no output schema, so return-value documentation is unnecessary. The description covers scope, topics and release-channel caveats adequately; only explicit sibling routing is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and both parameters have inline descriptions, so the schema carries the load. The description restates the same topic list almost verbatim, adding no syntax or semantics beyond what the schema provides; baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

It states a specific resource (Android XR / Jetpack XR reference) and enumerates the concrete artifacts covered (SpatialPanel, UserSubspace, Orbiter, ARCore for XR), which distinguishes it from the wear/large-screen guides. It is not a verb-led tool, but for a documentation-retrieval tool the scope statement is clear enough to select it.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by domain: consult this when building XR experiences. There is no explicit when-to-use or when-not-to-use, and no routing to siblings such as android_large_screen_guide or android_component_status for overlapping questions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

architecture_referenceAndroid Architecture ReferenceA
Read-onlyIdempotent

Official Android architecture guide for a topic (mvvm, compose, navigation, hilt, viewmodel, room, workmanager, paging, datastore, coroutines, flow, testing, lifecycle, modularization, security…). Call before proposing app structure. Pass 'list' for all topics.

ParametersJSON Schema
NameRequiredDescriptionDefault
topicYesArchitecture topic. E.g. 'mvvm', 'compose', 'hilt', 'modular architecture'. Pass 'list' for all topics.
refreshNoResend content already sent in this session

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so safety is covered. The description adds meaningful behavioral context the annotations do not: that the content is an official curated guide, that it should be fetched proactively before structural decisions, and that a 'list' sentinel enumerates topics. It omits that content is session-cached and re-sent only via the refresh flag, which lives only in the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the purpose, then the usage imperative, then the discovery sentinel. The parenthetical topic enumeration is long but arguably earns its place by defining the accepted vocabulary.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only reference lookup with no output schema, the agent knows what to pass and roughly what it gets back (a topic guide). It would be stronger with a sentence on return shape (e.g. markdown guide text vs. code samples) or how to chain results into further design work.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% – both 'topic' and 'refresh' carry their own descriptions including the 'list' sentinel and session-cache semantics. The description largely restates the schema's topic examples, adding no syntax or format information beyond it, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: it retrieves an official Android architecture guide for a named topic, and it enumerates the valid topic space. It does not, however, distinguish itself from overlapping siblings such as android_navigation3_guide, android_testing_guide, or kotlin_best_practices, whose topical coverage intersects with the listed topics.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Call before proposing app structure" gives a clear triggering context for the agent, and "Pass 'list' for all topics" gives a concrete discovery path. There is no when-not guidance and no routing advice for the overlapping sibling guides, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

gradle_dependency_checkerGradle Dependency Version CheckerA
Read-onlyIdempotent

Current stable version and ready-to-paste Gradle (Kotlin DSL / TOML) for an Android, Kotlin, or Jetpack library from Google Maven / Maven Central, including BOM handling. Accepts a name ('room', 'compose-bom', 'coil') or exact 'group:artifact'. Call before adding or bumping any dependency.

ParametersJSON Schema
NameRequiredDescriptionDefault
refreshNoResend content already sent in this session
library_nameYesLibrary name. E.g. 'compose', 'room', 'hilt', 'retrofit', 'kotlin-stdlib', 'coil', 'paging'.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish readOnly, idempotent, openWorld, and non-destructive behavior. The description adds useful output behavior, specifying stable version plus Gradle DSL/TOML snippets and BOM handling, though it does not describe error cases or refresh semantics beyond the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three compact sentences front-load the output, then input form, then when to call. No repetition or filler; every clause adds operational detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description does the key work by naming the return content and Gradle formats. It leaves minor edge cases such as unknown library handling unstated, but it is sufficient for an agent to decide when and how to call it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3, but the description adds meaningful syntax guidance: it accepts a short name or exact 'group:artifact'. The 'refresh' parameter is left to the schema, but its description there is adequate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States exactly what it returns: current stable version and ready-to-paste Gradle for Android/Kotlin/Jetpack from Google Maven/Maven Central, including BOM handling. It also states accepted input forms, so an agent can distinguish it from general Android search/reference tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides a clear pre-call trigger: 'Call before adding or bumping any dependency.' It also clarifies accepted input shorthand, but does not state limitations such as unsupported repositories or whether it works for non-Android libraries.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

kotlin_best_practicesKotlin & Android Best PracticesA
Read-onlyIdempotent

Official Kotlin/Android code patterns with anti-patterns: coroutines-viewmodel, stateflow-ui, compose-state, room-dao, hilt-injection, navigation-compose, workmanager-task, sealed-result. Empty topic lists all.

ParametersJSON Schema
NameRequiredDescriptionDefault
topicNoPattern name or keyword. E.g. 'coroutines', 'compose state', 'room', 'hilt'. Leave empty to list all.
refreshNoResend content already sent in this session

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds genuine value by naming the full topic catalog and the empty-topic listing behavior, which is behavioral context the annotations cannot convey. It stops short of describing return format or content freshness, which the 'refresh' flag hints at but never explains.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with the core capability first, followed by the topic inventory and the empty-topic rule. It is dense but every clause carries information; the only minor cost is that the topic list reads like a schema dump.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only, zero-required-parameter lookup tool with 100% schema coverage and annotations already covering safety, the description supplies enough to invoke it correctly. The remaining gap – what the returned content looks like and how the refresh flag behaves – is modest, and there is no output schema to carry that burden.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%: the 'topic' param already documents examples and the empty-to-list-all behavior, and 'refresh' documents re-sending session content. The description's topic list loosely mirrors the schema examples without adding syntax or matching rules (e.g., whether 'compose state' matches 'compose-state'), so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific resource (official Kotlin/Android code patterns with anti-patterns) and enumerates the retrievable topics, so an agent knows exactly what content this tool serves. It does not, however, explicitly differentiate itself from close siblings like architecture_reference or android_official_search, leaving overlap to inference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives one concrete usage rule ('Empty topic lists all'), which tells the agent how to use the topic parameter in list vs lookup mode. But there is no guidance on when to choose this over android_official_search, architecture_reference, or the various per-topic guide tools, so the routing decision is left implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

material3_expressiveMaterial 3 Expressive ReferenceA
Read-onlyIdempotent

Material 3 Expressive reference: MaterialExpressiveTheme, MotionScheme, ButtonGroup, FloatingToolbar, LoadingIndicator, MaterialShapes, typography, Wear, migration from M3. Call before building Compose UI or theming. Empty topic lists all.

ParametersJSON Schema
NameRequiredDescriptionDefault
topicNoM3E topic. E.g. 'ButtonGroup', 'MotionScheme', 'MaterialShapes', 'migration', 'wear'. Leave empty to list all topics.
refreshNoResend content already sent in this session

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive, open-world, so the safety profile is fully covered. The description adds a modest behavioral detail — an empty topic lists all topics — and implicitly frames the output as advisory reference content to consult pre-build. It does not disclose how content is returned, whether topic matching is exact, or what happens for an unknown topic; with no output schema, that remains a gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One sentence, front-loaded with the topic inventory that is genuinely the most useful information, followed by the usage cue. The keyword enumeration is dense but each term maps to a real capability, so little is wasted; it only loses a point for being a bare list rather than stating scope proportionally.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-optional-parameter reference lookup with no output schema, the agent knows what topics exist, when to invoke it, and how to enumerate everything. The remaining gap is routing against overlapping siblings (component status, Wear OS guide) and any hint about result depth, neither of which is fatal for a read-only knowledge tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters are already documented in the schema with examples and the same 'empty to list all' note. The description repeats the empty-topic behavior and adds nothing about the refresh flag or accepted topic forms. Baseline 3 applies when the schema does the work.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the resource (Material 3 Expressive reference) and enumerates the concrete topics it covers — MaterialExpressiveTheme, MotionScheme, ButtonGroup, FloatingToolbar, LoadingIndicator, MaterialShapes, typography, Wear, migration. That gives an agent a strong signal of scope. It is weaker on verb phrasing ("reference" rather than an explicit retrieve/lookup) and overlaps with siblings like android_wearos_guide on the 'Wear' topic, which it does not disambiguate.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Call before building Compose UI or theming" is explicit timing guidance that tells the agent when this tool belongs in a workflow. "Empty topic lists all" gives a discovery path. However, it offers no exclusions or named alternatives, and the sibling set contains overlapping guides (android_component_status, android_wearos_guide) that are never mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 21 tool updatesv2.1.0
    • Changedandroid_api17_compliance2 fields changed
      • addedInput schema / properties / refresh
        Added value: +{
        +  "description": "Resend content already sent in this session",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / topic / description
        Previous value: -"Topic: 'overview', 'checklist', 'static final', 'local network', 'sms otp', 'npu', 'handoff'"New value: +"Topic: 'overview', 'checklist', 'static final', 'local network', 'sms otp', 'large screen', 'messagequeue', 'npu', 'handoff'"
    • Changedandroid_api36_compliance1 field changed
      • addedInput schema / properties / refresh
        Added value: +{
        +  "description": "Resend content already sent in this session",
        +  "type": "boolean"
        +}
    • Changedandroid_build_and_publish1 field changed
      • addedInput schema / properties / refresh
        Added value: +{
        +  "description": "Resend content already sent in this session",
        +  "type": "boolean"
        +}
    • Changedandroid_code_validator3 fields changed
      • changedInput schema / properties / minSdk / description
        Previous value: -"App minSdk for API level context (e.g. 24)"New value: +"App minSdk (e.g. 24)"
      • changedInput schema / properties / targetSdk / description
        Previous value: -"App targetSdk for API 36 compliance checks (e.g. 36)"New value: +"App targetSdk (e.g. 37)"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "counts": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "error": {
        +          "type": "integer"
        +        },
        +        "info": {
        +          "type": "integer"
        +        },
        +        "warning": {
        +          "type": "integer"
        +        }
        +      },
        +      "required": [
        +        "error",
        +        "warning",
        +        "info"
        +      ],
        +      "type": "object"
        +    },
        +    "language": {
        +      "enum": [
        +        "kotlin",
        +        "xml",
        +        "gradle",
        +        "unknown"
        +      ],
        +      "type": "string"
        +    },
        +    "minSdk": {
        +      "anyOf": [
        +        {
        +          "type": "integer"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ]
        +    },
        +    "rulesEvaluated": {
        +      "type": "integer"
        +    },
        +    "targetSdk": {
        +      "anyOf": [
        +        {
        +          "type": "integer"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ]
        +    },
        +    "verdict": {
        +      "enum": [
        +        "PASS",
        +        "WARN",
        +        "FAIL"
        +      ],
        +      "type": "string"
        +    },
        +    "violations": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "column": {
        +            "type": "integer"
        +          },
        +          "docUrl": {
        +            "type": "string"
        +          },
        +          "line": {
        +            "type": "integer"
        +          },
        +          "message": {
        +            "type": "string"
        +          },
        +          "replacement": {
        +            "type": "string"
        +          },
        +          "ruleId": {
        +            "type": "string"
        +          },
        +          "severity": {
        +            "enum": [
        +              "error",
        +              "warning",
        +              "info"
        +            ],
        +            "type": "string"
        +          },
        +          "snippet": {
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "ruleId",
        +          "severity",
        +          "line",
        +          "column",
        +          "snippet",
        +          "message",
        +          "replacement",
        +          "docUrl"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "verdict",
        +    "language",
        +    "minSdk",
        +    "targetSdk",
        +    "counts",
        +    "rulesEvaluated",
        +    "violations"
        +  ],
        +  "type": "object"
        +}
    • Changedandroid_debugger1 field changed
      • addedInput schema / properties / refresh
        Added value: +{
        +  "description": "Resend content already sent in this session",
        +  "type": "boolean"
        +}
    • Addedandroid_developer_verification
    • Changedandroid_kmp_guide1 field changed
      • addedInput schema / properties / refresh
        Added value: +{
        +  "description": "Resend content already sent in this session",
        +  "type": "boolean"
        +}
    • Changedandroid_large_screen_guide1 field changed
      • addedInput schema / properties / refresh
        Added value: +{
        +  "description": "Resend content already sent in this session",
        +  "type": "boolean"
        +}
    • Changedandroid_navigation3_guide1 field changed
      • addedInput schema / properties / refresh
        Added value: +{
        +  "description": "Resend content already sent in this session",
        +  "type": "boolean"
        +}
    • Changedandroid_official_search1 field changed
      • addedInput schema / properties / refresh
        Added value: +{
        +  "description": "Resend content already sent in this session",
        +  "type": "boolean"
        +}
    • Changedandroid_ondevice_ai2 fields changed
      • addedInput schema / properties / refresh
        Added value: +{
        +  "description": "Resend content already sent in this session",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / topic / description
        Previous value: -"Topic: 'overview', 'setup', 'smart reply', 'ml kit', 'architecture'"New value: +"Topic: 'overview', 'setup', 'smart reply', 'ml kit', 'architecture', 'appfunctions'"
    • Changedandroid_permission_advisor1 field changed
      • addedInput schema / properties / refresh
        Added value: +{
        +  "description": "Resend content already sent in this session",
        +  "type": "boolean"
        +}
    • Changedandroid_play_policy_advisor1 field changed
      • addedInput schema / properties / refresh
        Added value: +{
        +  "description": "Resend content already sent in this session",
        +  "type": "boolean"
        +}
    • Changedandroid_scalability_guide1 field changed
      • addedInput schema / properties / refresh
        Added value: +{
        +  "description": "Resend content already sent in this session",
        +  "type": "boolean"
        +}
    • Changedandroid_testing_guide1 field changed
      • addedInput schema / properties / refresh
        Added value: +{
        +  "description": "Resend content already sent in this session",
        +  "type": "boolean"
        +}
    • Changedandroid_wearos_guide1 field changed
      • addedInput schema / properties / refresh
        Added value: +{
        +  "description": "Resend content already sent in this session",
        +  "type": "boolean"
        +}
    • Changedandroid_xr_guide1 field changed
      • addedInput schema / properties / refresh
        Added value: +{
        +  "description": "Resend content already sent in this session",
        +  "type": "boolean"
        +}
    • Changedarchitecture_reference1 field changed
      • addedInput schema / properties / refresh
        Added value: +{
        +  "description": "Resend content already sent in this session",
        +  "type": "boolean"
        +}
    • Changedgradle_dependency_checker1 field changed
      • addedInput schema / properties / refresh
        Added value: +{
        +  "description": "Resend content already sent in this session",
        +  "type": "boolean"
        +}
    • Changedkotlin_best_practices1 field changed
      • addedInput schema / properties / refresh
        Added value: +{
        +  "description": "Resend content already sent in this session",
        +  "type": "boolean"
        +}
    • Changedmaterial3_expressive1 field changed
      • addedInput schema / properties / refresh
        Added value: +{
        +  "description": "Resend content already sent in this session",
        +  "type": "boolean"
        +}
  2. 22 tool updatesv1.7.1
    • First observedandroid_api_level_check
    • First observedandroid_api17_compliance
    • First observedandroid_api36_compliance
    • First observedandroid_build_and_publish
    • First observedandroid_code_validator
    • First observedandroid_component_status
    • First observedandroid_debugger
    • First observedandroid_kmp_guide
    • First observedandroid_large_screen_guide
    • First observedandroid_navigation3_guide
    • First observedandroid_official_search
    • First observedandroid_ondevice_ai
    • First observedandroid_permission_advisor
    • First observedandroid_play_policy_advisor
    • First observedandroid_scalability_guide
    • First observedandroid_testing_guide
    • First observedandroid_wearos_guide
    • First observedandroid_xr_guide
    • First observedarchitecture_reference
    • First observedgradle_dependency_checker
    • First observedkotlin_best_practices
    • First observedmaterial3_expressive

TDQS

A3.5/5.0

Scored across 23 tools

Disambiguation4/5

Most tools have clearly distinct domains (XR, Wear OS, KMP, Play policy, testing, build/publish), and descriptions give explicit call triggers. However, several knowledge tools overlap: architecture_reference, kotlin_best_practices, and android_navigation3_guide all touch navigation/room/compose topics, and large-screen concerns appear in both android_large_screen_guide and android_api36_compliance, creating some misselection risk.

Naming Consistency4/5

All names use predictable snake_case noun-phrase style that is easy to scan and reason about. The only inconsistency is the 'android_' prefix, which is applied to most but not all tools (architecture_reference, gradle_dependency_checker, kotlin_best_practices, material3_expressive lack it).

Tool Count4/5

23 tools is on the heavy side and borders the 'too many' threshold, but the breadth of covered domains (Wear, XR, KMP, Play policy, testing, publishing, compliance) justifies most of them. Each tool appears to own a distinct topic rather than duplicating another.

Completeness5/5

The surface is remarkably complete for an Android/Kotlin assistant: official search, API status, architecture and framework guides, dependency versioning, API-level mapping, permissions, testing, build/publish, code validation, plus Play compliance and developer verification. General fallback (android_official_search) covers residual lookups, leaving few obvious dead ends.

Maintenance

ActivityActive
ResponsivenessResponsive

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    B
    maintenance
    Provides AI coding assistants with access to Google's Android development skills library through an MCP server. Enables developers to discover, search, and apply Android best practices directly within their coding environment without manual copying.
    223
    -
  • F
    license
    Not graded
    quality
    A
    maintenance
    Enables AI assistants to search and read real AOSP and AndroidX source code on demand, including class lookups, precise method bodies with Javadoc, inheritance hierarchies, regex source search, and optional LSP-powered cross-file definition, reference, and type information. Sources are synced locally so framework internals like the Activity lifecycle, ViewModel restoration, or Compose internals can be inspected offline without relying on outdated training data.
    -
  • F
    license
    Not graded
    quality
    A
    maintenance
    Provides AI tools with on-demand, precise access to real AOSP framework and AndroidX source code, so they can search classes, extract exact method bodies with Javadoc, inspect inheritance hierarchies, and trace definitions and references across the entire tree. Sources are synced locally for fast, offline lookups, with optional language-server features for cross-file navigation.
    -