Skip to content

[MCP] Crashlytics tools not loaded for Android projects using Gradle version catalogs (libs.versions.toml) #11351

Open

Description

@klemensz

Summary

Crashlytics MCP tools are not loaded for Android projects that declare their dependencies via a Gradle version catalog (gradle/libs.versions.toml), which is the default for new Android Studio projects.

androidAppUsesCrashlytics() in src/mcp/util/crashlytics/availability.ts only scans build.gradle* files for firebase-crashlytics|firebase.crashlytics|com.google.firebase.crashlytics. With a version catalog, the build files only contain catalog accessors, for example:

// app/build.gradle
plugins {
    alias(libs.plugins.firebaseCrashlytics)
}
dependencies {
    implementation platform(libs.firebaseBom)
    implementation libs.firebaseCrashlytics
}

while the actual coordinates live in gradle/libs.versions.toml:

[libraries]
firebaseCrashlytics = { module = "com.google.firebase:firebase-crashlytics" }

[plugins]
firebaseCrashlytics = { id = "com.google.firebase.crashlytics", version.ref = "firebaseCrashlyticsPlugin" }

So detection returns false and no crashlytics_* tools are exposed, although the app uses Crashlytics. The troubleshooting FAQ mentions "non-standard dependency management systems", but version catalogs are standard Gradle.

Suggested fix: also scan *.versions.toml files (e.g. gradle/libs.versions.toml) with the same pattern in androidAppUsesCrashlytics().

Bug Info

  • Affected Tool(s): all crashlytics_* tools (not loaded); auto feature detection
  • MCP Client: Claude Code 2.1.282 with the official Firebase plugin 1.1.0 (firebase-tools@15.32.1 mcp --dir .); detection code is unchanged in 15.34.1
  • Operating System: macOS 26.6.2

Steps to Reproduce

  1. Use an Android project that uses Crashlytics and declares it only via a version catalog (libs.versions.toml), as shown above.
  2. Start the Firebase MCP server in that directory without --only (e.g. via the Claude Code Firebase plugin).
  3. List tools: no crashlytics_* tools are available.

Calling the detection directly confirms it:

platforms: [ 'ANDROID' ]
debug: Looking for whether crashlytics is installed...
debug: Found supported platforms ["ANDROID"], but did not find a Crashlytics dependency.
crashlytics: false

Workaround: start the server with --only core,crashlytics,.... This is not possible with the plugin's bundled MCP config without editing it.

Activity

  1. self-assigned this
    on Oct 28, 2026
  2. aalej commented on Oct 28, 2026

    @aalej
    Contributor

    Thanks for the detailed report @klemensz! Looking at the codebase, it seems like our logic for determining if your app uses Crashlytics is by parsing your build.gradle file -

    async function androidAppUsesCrashlytics(appPath: string): Promise<boolean> {
    const buildGradleFiles = await detectFiles(appPath, "build.gradle*");
    const crashlyticsPattern =
    /(firebase-crashlytics|firebase\.crashlytics|com\.google\.firebase\.crashlytics)/;
    for (const file of buildGradleFiles) {
    const content = await fs.readFile(path.join(appPath, file), "utf8");
    if (crashlyticsPattern.test(content)) {
    return true;
    }
    }
    return false;
    }

    The patterns we use would work if dependencies were kebab-case in TOML keys, but would fail if using camelCase. I think your suggestion of also parsing the *.versions.toml is a good solution since firebase-crashlytics would also be listed there - opened up a PR to get this updated.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

    ⌂ Proxy