Skip to main content
Glama
droidasc-mcp

droidasc-mcp

by cnlnn

asc_open_artifact_session

Creates an immutable, reusable DEX session from APK, JAR, AAR, AAB, APKS, XAPK, or ZIP inputs using container hashes, so you can safely query selected classes.

Instructions

Snapshot selected direct DEX into an immutable reusable session with container hashes.

Direct DEX at arbitrary archive paths, AAR classes.jar DEX and selected AAB modules are supported. Pure JVM classes and nested split APKs stay inventory-only. Duplicate classes are rejected. Query and close the resulting ID with the existing DEX session tools.

Input Schema

NameRequiredDescriptionDefault
moduleNoAAB exact module, 1-100 distinct names, or * for all; omitted selects base
artifact_pathYesAPK/JAR/AAR/AAB/APKS/XAPK/ZIP input within allowed roots
max_uncompressed_bytesNoExpanded JAR/DEX bytes; disk reservation scales with this budget

Output Schema

NameRequiredDescriptionDefault
codeNo
depthNo
edgesNo
indexNo
itemsNo
limitNo
nodesNo
totalNo
formatNo
groupsNo
moduleNo
offsetNo
sourceNo
statusYes
backendNo
messageNo
sourcesNo
apk_pathNo
coverageNo
has_moreNo
input_idNo
dex_entryNo
directionNo
max_edgesNo
max_nodesNo
span_unitNo
truncatedNo
apk_sha256No
class_nameNo
edge_countNo
input_kindNo
limit_unitNo
node_countNo
session_idNo
source_endNo
superclassNo
total_unitNo
type_matchNo
edge_countsNo
field_countNo
limitationsNo
method_nameNo
next_cursorNo
next_offsetNo
query_cacheNo
scan_errorsNo
access_flagsNo
has_manifestNo
method_countNo
source_startNo
stored_bytesNo
artifact_pathNo
dynamic_sitesNo
source_sha256No
type_relationNo
engine_versionNo
returned_sitesNo
artifact_sha256No
backend_versionNo
candidate_countNo
cleanup_pendingNo
page_limited_byNo
scanned_methodsNo
type_descriptorNo
definition_countNo
field_descriptorNo
idle_ttl_secondsNo
reference_formatNo
selected_modulesNo
unresolved_sitesNo
member_referencesNo
method_descriptorNo
truncation_reasonsNo
unresolved_matchesNo
reference_semanticsNo
response_byte_limitNo
methods_without_codeNo
reserved_index_bytesNo
runtime_completenessNo
scanned_instructionsNo
hierarchy_cycle_detectedNo
instruction_scan_completeNo
runtime_target_resolutionNo
unresolved_sites_truncatedNo
traversal_complete_within_depthNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed25 schema fields changedv0.2.5
    • changedInput schema / properties / module / anyOf
      Previous value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "type": "string"
      +  },
      +  {
      +    "items": {
      +      "type": "string"
      +    },
      +    "type": "array"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / module / description
      Previous value: -"Exact AAB module; omitted selects base"New value: +"AAB exact module, 1-100 distinct names, or * for all; omitted selects base"
    • addedOutput schema / $defs / DexRow / properties / target_index
      Added value: +{
      +  "title": "Target Index",
      +  "type": "integer"
      +}
    • addedOutput schema / $defs / ReferenceGroup
      Added value: +{
      +  "additionalProperties": true,
      +  "properties": {
      +    "caller": {
      +      "title": "Caller",
      +      "type": "string"
      +    },
      +    "dex_entry": {
      +      "title": "Dex Entry",
      +      "type": "string"
      +    },
      +    "evidence": {
      +      "items": {
      +        "$ref": "#/$defs/DexRow"
      +      },
      +      "title": "Evidence",
      +      "type": "array"
      +    },
      +    "matches": {
      +      "items": {
      +        "type": "string"
      +      },
      +      "title": "Matches",
      +      "type": "array"
      +    },
      +    "offset_unit": {
      +      "title": "Offset Unit",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "target_field": {
      +      "enum": [
      +        "callee",
      +        "field_descriptor",
      +        "value",
      +        "type_descriptor"
      +      ],
      +      "title": "Target Field",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "dex_entry",
      +    "caller",
      +    "target_field",
      +    "matches",
      +    "evidence"
      +  ],
      +  "title": "ReferenceGroup",
      +  "type": "object"
      +}
    • addedOutput schema / $defs / Source / properties / container_sha256
      Added value: +{
      +  "title": "Container Sha256",
      +  "type": "string"
      +}
    • addedOutput schema / $defs / Source / properties / container_size_bytes
      Added value: +{
      +  "title": "Container Size Bytes",
      +  "type": "integer"
      +}
    • addedOutput schema / $defs / Source / properties / logical_header_offset
      Added value: +{
      +  "title": "Logical Header Offset",
      +  "type": "integer"
      +}
    • addedOutput schema / $defs / Source / properties / logical_size_bytes
      Added value: +{
      +  "title": "Logical Size Bytes",
      +  "type": "integer"
      +}
    • addedOutput schema / $defs / Source / properties / module
      Added value: +{
      +  "title": "Module",
      +  "type": "string"
      +}
    • addedOutput schema / $defs / Source / properties / normalization
      Added value: +{
      +  "title": "Normalization",
      +  "type": "string"
      +}
    • addedOutput schema / $defs / Source / properties / original_dex_version
      Added value: +{
      +  "title": "Original Dex Version",
      +  "type": "string"
      +}
    • addedOutput schema / $defs / Source / properties / snapshot_entry
      Added value: +{
      +  "title": "Snapshot Entry",
      +  "type": "string"
      +}
    • addedOutput schema / $defs / Source / properties / stored_size_bytes
      Added value: +{
      +  "title": "Stored Size Bytes",
      +  "type": "integer"
      +}
    • addedOutput schema / properties / groups
      Added value: +{
      +  "items": {
      +    "$ref": "#/$defs/ReferenceGroup"
      +  },
      +  "title": "Groups",
      +  "type": "array"
      +}
    • addedOutput schema / properties / limit_unit
      Added value: +{
      +  "const": "caller_groups",
      +  "title": "Limit Unit",
      +  "type": "string"
      +}
    • addedOutput schema / properties / module
      Added value: +{
      +  "title": "Module",
      +  "type": "string"
      +}
    • addedOutput schema / properties / next_cursor
      Added value: +{
      +  "title": "Next Cursor",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • removedOutput schema / properties / page_limited_by / const
      Removed value: -"response_bytes"
    • addedOutput schema / properties / page_limited_by / enum
      Added value: +[
      +  "response_bytes",
      +  "caller_groups"
      +]
    • addedOutput schema / properties / reference_format
      Added value: +{
      +  "const": "grouped",
      +  "title": "Reference Format",
      +  "type": "string"
      +}
    • addedOutput schema / properties / returned_sites
      Added value: +{
      +  "title": "Returned Sites",
      +  "type": "integer"
      +}
    • addedOutput schema / properties / selected_modules
      Added value: +{
      +  "items": {
      +    "type": "string"
      +  },
      +  "title": "Selected Modules",
      +  "type": "array"
      +}
    • addedOutput schema / properties / total_unit
      Added value: +{
      +  "const": "reference_sites",
      +  "title": "Total Unit",
      +  "type": "string"
      +}
    • addedOutput schema / properties / type_match
      Added value: +{
      +  "enum": [
      +    "exact",
      +    "substring"
      +  ],
      +  "title": "Type Match",
      +  "type": "string"
      +}
    • addedOutput schema / properties / type_relation
      Added value: +{
      +  "title": "Type Relation",
      +  "type": "string"
      +}
  2. Changed18 schema fields changedv0.2.4
    • removedOutput schema / $defs / DexRow / properties / instruction_offset / anyOf
      Removed value: -[
      -  {
      -    "type": "integer"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / $defs / DexRow / properties / instruction_offset / type
      Added value: +[
      +  "integer",
      +  "null"
      +]
    • removedOutput schema / $defs / DexRow / properties / offset_unit / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / $defs / DexRow / properties / offset_unit / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / $defs / DexRow / properties / target_dex_entry / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / $defs / DexRow / properties / target_dex_entry / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / $defs / GraphNode / properties / dex_entry / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / $defs / GraphNode / properties / dex_entry / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / $defs / GraphNode / properties / without_code / anyOf
      Removed value: -[
      -  {
      -    "type": "boolean"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / $defs / GraphNode / properties / without_code / type
      Added value: +[
      +  "boolean",
      +  "null"
      +]
    • addedOutput schema / $defs / QueryCache / properties / budget_bytes
      Added value: +{
      +  "title": "Budget Bytes",
      +  "type": "integer"
      +}
    • addedOutput schema / $defs / QueryCache / properties / stored_bytes
      Added value: +{
      +  "title": "Stored Bytes",
      +  "type": "integer"
      +}
    • removedOutput schema / properties / next_offset / anyOf
      Removed value: -[
      -  {
      -    "type": "integer"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / next_offset / type
      Added value: +[
      +  "integer",
      +  "null"
      +]
    • addedOutput schema / properties / page_limited_by
      Added value: +{
      +  "const": "response_bytes",
      +  "title": "Page Limited By",
      +  "type": "string"
      +}
    • addedOutput schema / properties / response_byte_limit
      Added value: +{
      +  "title": "Response Byte Limit",
      +  "type": "integer"
      +}
    • removedOutput schema / properties / superclass / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / superclass / type
      Added value: +[
      +  "string",
      +  "null"
      +]
  3. Addedv0.2.3

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already disclose that this is not read-only, not destructive, and closed-world; the description adds useful context that it creates an immutable reusable session with hashes. It also discloses that duplicate classes are rejected and that some inputs stay inventory-only. It does not mention permission requirements or other operational constraints beyond the schema's byte budget.

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?

The description is short, front-loaded with the core action, and each additional sentence adds useful scope or follow-up information. There is no redundant restatement of the tool name or schema fields.

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?

Given the annotations, 100% schema coverage, and an output schema, the description provides enough context to invoke the tool correctly. It covers supported inputs, limitations, duplicate handling, and how to use the resulting session ID.

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. The description adds meaningful context for artifact_path and module by explaining supported artifact forms, selected AAB modules, and inventory-only cases. It does not add much beyond the schema for max_uncompressed_bytes, but the schema already documents that 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 states a specific verb and resource: it snapshots selected direct DEX into an immutable reusable session with container hashes. It also scopes supported artifact types and limitations. It does not explicitly distinguish this from the sibling asc_open_dex_session, so it falls short of full sibling differentiation.

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 clearly indicates supported contexts: direct DEX at archive paths, AAR classes.jar DEX, and selected AAB modules, while noting that pure JVM classes and nested split APKs remain inventory-only. It also says to query and close the resulting ID with existing DEX session tools. It does not explicitly name when to prefer asc_open_dex_session instead.

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