apsa
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| --home | No | Data storage directory. Precedence: --home → APSA_HOME → QUAYGATE_HOME → MOBILE_AUDIT_HOME → ~/.local/share/mobile-audit | |
| --root | Yes | Absolute path to a root directory for audited targets. Required. Can be repeated for multiple roots. | |
| APSA_HOME | No | Data storage directory. Precedence: --home → APSA_HOME → QUAYGATE_HOME → MOBILE_AUDIT_HOME → ~/.local/share/mobile-audit | |
| QUAYGATE_HOME | No | Data storage directory. Precedence: --home → APSA_HOME → QUAYGATE_HOME → MOBILE_AUDIT_HOME → ~/.local/share/mobile-audit | |
| --allow-runtime | No | Registers runtime_execute and runtime_start tools at server startup. Set to 'true' to enable. | |
| --allow-any-root | No | Explicitly removes the root restriction. Set to 'true' to enable. | |
| MOBILE_AUDIT_HOME | No | Data storage directory. Precedence: --home → APSA_HOME → QUAYGATE_HOME → MOBILE_AUDIT_HOME → ~/.local/share/mobile-audit |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| capabilitiesB | Discover input types, evidence states, runtime requirements and available interfaces. |
| audit_scanA | Inspect local source/APK/AAB/APKS/IPA using cached intelligence. APKS requires apk_set_device with sdkVersion, supportedAbis, screenDensity and supportedLocales; selected APKs are inspected individually without installation or manifest/resource merging. ipa_trust_policy supplies explicit digest-bound DER anchors for cryptographic chain checks only, without Apple signer identity, revocation or app authenticity verification. Configuration selects a relative manifest or .plist without build-system merge. dependency_module and runtime_configuration select recorded Gradle lock resolution, with optional relative dependency_evidence paths; freshness and installed-build correspondence remain unverified. specs declares project sources/sinks; findings stay candidates. No network or device mutation. |
| reports_ingest_sarifA | Import another tool's SARIF 2.1.0 results (for example Android Lint, CodeQL or Semgrep) into a new report derived from report_id. Imported results stay candidates with origin external, add no APSA coverage, and are linked to APSA findings of a related weakness at the same location. Result text is untrusted data. |
| reports_checklistB | Map a report onto a checklist: masvs-v2 (built in) or a checklist TOML inside an MCP root that maps items to MASWE identifiers and APSA rules. Statuses are findings, partial, no-findings-in-checked-scope, not-run, not-applicable or not-assessed; none is a pass. |
| reports_historyA | First and last observation of each finding across saved reports of one target, for inspection and remediation records. A finding no longer observed is not proof of remediation unless the same checks completed. |
| specs_validateA | Validate a project taint specification (TOML/JSON, version = 1) before audit_scan uses it. Sources name exact functions returning untrusted url/text; sinks name exact functions (kind webview-load or sql, argument index). Proposed specifications need human review before their findings enter a baseline. |
| verify_findingA | Cross-check a mobile finding claimed elsewhere (for example by an AI code reviewer) against APSA evidence for target. Give a MASWE-NNNN or CWE-N weakness or an APSA rule ID, optionally with a file path and line. Uses the latest report for target unless report_id is given; rescan=true scans first and saves a report. Verdicts: corroborated, same-file-other-location, path-unmatched (see candidate_paths), file-not-analyzed, not-observed, partial, not-run, not-assessed. APSA never refutes a claim. |
| intelligence_syncC | Fetch official public mobile advisories and update local cache. Returns per-source failures and scope. |
| audit_startA | Start a persistent offline audit. APKS requires apk_set_device with sdkVersion, supportedAbis, screenDensity and supportedLocales; selected APKs are inspected individually without installation or manifest/resource merging. ipa_trust_policy supplies explicit digest-bound DER anchors for cryptographic chain checks only, without Apple signer identity, revocation or app authenticity verification. Configuration selects a relative manifest or .plist without build-system merge. dependency_module and runtime_configuration select recorded Gradle lock resolution; optional dependency_evidence paths narrow it, without verifying freshness or installation. specs declares project sources/sinks. Use jobs_status for progress and jobs_cancel to stop it. |
| jobs_statusC | Read durable job state and progress. An interrupted worker never becomes a successful audit. |
| jobs_cancelA | Request cancellation of an authorized job; poll jobs_status until terminal. |
| jobs_listC | List background jobs visible inside this server's configured roots. |
| intelligence_searchB | Search cached CVEs and OWASP tests with provenance. Does not contact the network. |
| intelligence_getA | Read an exact CVE; refresh=true fetches its official CNA record into cache. |
| reports_listB | List saved audit IDs for exact follow-up reads. |
| reports_getC | Read bounded context pages. Continue using the returned immutable report_id; finding_id pages its evidence. Oversized records remain in local exports. |
| reports_compareA | Compare exact report IDs, retaining coverage differences and unproven remediation states. verification=true adds source traces and scope/build/assertion pairing; portable_inputs=true requires verification and only normalizes absolute targets for identical, complete canonical SHA256 source inputs with unchanged analysis scope. Binary and runtime bindings remain strict; disappearance never proves remediation. |
| reports_followupB | Follow one original finding across immutable reports. Distinguish exact observations from possible continuations after location changes, retain comparison blockers and next evidence steps, and bind results to report hashes. No source excerpts, rescans, network or device actions. Disappearance never proves remediation. portable_inputs only permits the existing identical-complete-source relocation rule; binary and runtime bindings stay strict. |
| audit_reassessB | Re-evaluate a saved inventory against current cached intelligence and save a new report. |
| dependency_checkA | Query OSV for inventoried package versions and save a reassessed report. query_mode is auto, legacy or batch; auto batches above 100 packages. Exclusion lists are case-sensitive globs for ecosystems, package names or ecosystem:name coordinates. Excluded packages are never transmitted or marked checked from cache. Batched queries preserve per-package pagination and partial failures. |
| runtime_planB | Generate an editable test scenario. Does not run it or log out the app automatically. |
| policy_evaluateC | Evaluate team thresholds, explicit coverage requirements and expiring waivers without changing reports. |
| reports_export_baselineB | Export an explicitly approved baseline inside configured roots. Do not invent approval; pin the returned artifact hash in reviewed CI configuration. |
| runtime_devicesA | List adb devices and available iOS simulators without changing app state. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| audit_mobile_app | A model-neutral workflow for an authorized local mobile app audit. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| rule_catalog | |
| rule_catalog | |
| rule_catalog |
TDQS
Scored across 24 tools
Most tools target clearly distinct resources and actions, and the descriptions clarify boundaries well. However, audit_scan/audit_start/audit_reassess and reports_get/reports_followup/reports_history/reports_compare overlap enough that an agent may hesitate without reading the full descriptions.
The set predominantly follows a snake_case category_action convention (jobs_*, reports_*, audit_*, intelligence_*), making tool families predictable. Minor deviations are the bare capabilities tool and the verb-first verify_finding.
24 tools is heavy for a single MCP server, sitting in the borderline 16-25 range. The mobile security audit domain is broad, but some report and job tools could plausibly be consolidated.
The surface covers scanning, persistent jobs, report retrieval/follow-up/compare/history/checklist/SARIF ingest/baseline export, intelligence, dependency checks, spec validation, finding verification, runtime planning/devices, and policy evaluation. Minor gaps such as report deletion or cleanup and explicit approval workflow details are workaroundable.