Frida MCP has 37 well-named tools with consistent verb_noun patterns (list_, get_, connect, disconnect, etc.). All tools have descriptions and input schemas with typed parameters. However, descriptions are often terse (many under 100 chars), lack dependency hints, and output schemas are not documented. Parameter descriptions are minimal, many lack format/constraint guidance. Error handling and recovery guidance are absent. No tool annotations (readOnlyHint/destructiveHint) despite clear risk levels. Missing pagination for list tools. No examples of idempotency or confirmation patterns for destructive ops.
Get the current foreground activity
Hook a Java method to monitor calls. Logs arguments, return values, and optionally backtraces.
List loaded Java classes, optionally filtered by pattern
List methods of a Java class
Search for Java classes matching a pattern
Disable SSL certificate pinning to allow traffic interception
Clear the hook message buffer
Output schemas not documented. Tools return data but LLMs cannot plan downstream calls without knowing response structure. E.g., list_devices, list_processes, list_apps lack documented return types.
No pagination support on list tools. list_devices, list_processes, list_apps, android_list_classes, memory_list_modules lack limit/offset/cursor parameters and total count in response.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Tools marked as DESTRUCTIVE (memory_write, run_java, run_script) or WRITE (connect, disconnect, etc.) lack MCP annotations to guide agent behavior.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 64 | 2026-07-28+ | v2 |
Connect to an app by bundle ID, name, or PID. Must call this before using other tools. When spawn=True, uses reliable adb-based launch instead of Frida spawn.
Disconnect from the current session
Dump all methods and fields of a Java class
Download a file from device to local machine
List files in a directory on the device
Read a text file from the device
Get collected messages from persistent hooks
Get base address of a module by name (partial match supported)
Get PID of a running app by package name. Useful before attaching with connect().
Search Java heap for instances of a class
Hook a native function by module name + offset
Install a persistent hook script that stays active and collects messages
Check if Frida session is still alive and healthy. Returns connection status, PID, and device info.
Launch an app via adb and return its PID (smart wait - polls for process).
List installed applications on a device
List all available Frida devices (USB, remote, local)
List all installed persistent hooks
List running processes on a device
List all active Frida sessions. Supports multi-device workflows.
List exports (functions) from a specific module
List all loaded modules (libraries) in the process
Read memory at a specific address
Search process memory for a pattern
Write bytes to memory address
Run arbitrary Java code within Java.performNow context
Execute custom Frida JavaScript code and collect messages
Force stop app, launch fresh, and attach Frida. The reliable alternative to connect(spawn=True) which often times out.
Force stop an app by package name
Switch to a different active session by ID. Use list_sessions to see available sessions.
Unload all persistent hook scripts
Descriptions lack dependency hints and recovery guidance. E.g., connect() says 'Must call this before using other tools' but no error message tells LLM what to do if not connected. No guidance on when to use spawn_and_attach vs connect(spawn=true).
Parameter descriptions lack format/constraint guidance. E.g., 'timeout_ms' has no min/max bounds; 'pattern' in memory_search lacks hex format specification; 'offset' in hook_native lacks explanation of byte vs instruction offset.