Skip to main content
Glama
android-reserve-mcp

android-reserve-mcp

by lonnnnnng

frida

Destructive

Control Android runtime instrumentation by attaching or spawning processes, loading scripts, enumerating Java loaders/methods, and tracing Java/JNI/native calls for dynamic analysis.

Instructions

明确设备的attach/spawn/load/resume/status/close;java-loaders枚举唯一selector,java-methods读取默认或显式唯一loader方法重载,trace-java需显式argumentTypes,可同agent nativeHooks按线程/调用范围关联JNI。trace-jni观测未来动态注册/撤销;Native选择symbolName或模块rva二选一,未加载模块等待时间有限且可缩短。unload只撤销本服务scriptId。

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "action": "<action>"
    },
    "name": "frida"
  }
}

Input Schema

NameRequiredDescriptionDefault
pidNo
rvaNo
actionYes
deviceIdNo
scriptIdNo
classNameNo
maxEventsNo
sessionIdNo
maxMethodsNo
methodNameNo
moduleNameNo
returnTypeNo
scriptPathNo
symbolNameNo
nativeHooksNo
packageNameNo
captureStackNo
moduleWaitMsNo
argumentCountNo
argumentTypesNo
argumentOffsetNo
loaderSelectorNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.5.2

TDQS

B3.4/5.0
Behavior4/5

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

Annotations already declare destructive=true and openWorld=false, and the description adds genuinely new behavior: trace-jni observes future dynamic registration/revocation rather than a snapshot, nativeHooks can be correlated by thread/call scope from the same agent, unloaded-module waiting is bounded and shorten-able, and unload's blast radius is limited to this service's scriptId. It does not cover reversibility of attach/spawn or what happens to an active session on close.

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

Conciseness2/5

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

It is short in character count but structured as a single semicolon chain of dense clauses with no front-loaded summary sentence, making it hard to scan for a specific action. Several clauses (e.g. the truncated-sounding '明确设备的...') do not form complete guidance and force the agent to re-parse the whole string per action.

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 15-action, 22-parameter, destructive tool with no output schema, the description covers the trickier operations (java-loaders, java-methods, trace-java, trace-jni, native, unload) but silently omits devices, processes, runtime and trace-native, and never describes return values for any action. An agent can call the documented actions but must guess at the rest.

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?

With 0% schema description coverage across 22 parameters, the description must carry the load; it clarifies argumentTypes, the symbolName-vs-rva exclusivity, moduleWaitMs, loaderSelector uniqueness and the nativeHooks shape, which is meaningful compensation. But pid, deviceId, sessionId, className, methodName, scriptPath, maxEvents, maxMethods, captureStack and packageName remain undocumented in both schema and description.

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 concrete verbs and resources — attach/spawn/load/resume/status/close, java-loaders, java-methods, trace-java, trace-jni, unload — so an agent can map most enum actions to a described behavior. It never states the high-level purpose (Frida dynamic instrumentation) and leaves devices, processes, runtime and trace-native unexplained, so the overall identity must be inferred from action fragments.

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 supplies real selection rules: Native requires exactly one of symbolName or module rva, trace-java needs explicit argumentTypes, java-methods reads the default or an explicitly unique loader, and unload only revokes this service's scriptId. These are constraints, not when-to-use guidance — it never says when to pick this tool over siblings such as native or script, and gives no prerequisites for destructive actions.

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