frida-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
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
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_devicesA | List all available Frida devices (USB, remote, local) |
| list_processesB | List running processes on a device |
| list_appsB | List installed applications on a device |
| connectA | 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. |
| disconnectA | Disconnect from the current session |
| is_connectedA | Check if Frida session is still alive and healthy. Returns connection status, PID, and device info. |
| list_sessionsA | List all active Frida sessions. Supports multi-device workflows. |
| switch_sessionA | Switch to a different active session by ID. Use list_sessions to see available sessions. |
| get_pidA | Get PID of a running app by package name. Useful before attaching with connect(). |
| launch_appA | Launch an app via adb and return its PID (smart wait - polls for process). |
| stop_appB | Force stop an app by package name |
| spawn_and_attachA | Force stop app, launch fresh, and attach Frida. The reliable alternative to connect(spawn=True) which often times out. |
| memory_list_modulesA | List all loaded modules (libraries) in the process |
| memory_list_exportsB | List exports (functions) from a specific module |
| memory_searchC | Search process memory for a pattern |
| memory_readA | Read memory at a specific address |
| android_list_classesA | List loaded Java classes, optionally filtered by pattern |
| android_list_methodsB | List methods of a Java class |
| android_hook_methodA | Hook a Java method to monitor calls. Logs arguments, return values, and optionally backtraces. |
| android_search_classesB | Search for Java classes matching a pattern |
| android_ssl_pinning_disableA | Disable SSL certificate pinning to allow traffic interception |
| android_get_current_activityA | Get the current foreground activity |
| file_lsB | List files in a directory on the device |
| file_readA | Read a text file from the device |
| file_downloadB | Download a file from device to local machine |
| run_scriptA | Execute custom Frida JavaScript code. Java bridge is auto-imported, so Java.perform(), Java.use(), etc. work directly. |
| install_hookA | Install a persistent hook script that stays active and collects messages. Use get_hook_messages to retrieve collected output. |
| get_hook_messagesB | Get collected messages from persistent hooks installed via install_hook |
| clear_hook_messagesA | Clear the hook message buffer without retrieving |
| uninstall_hooksA | Unload all persistent hook scripts |
| list_hooksA | List all installed persistent hooks with their names and indices |
| get_module_baseA | Get base address of a module by name (partial match). Returns {module: {name, base, size, path}} |
| hook_nativeA | Hook a native function by module+offset. Messages collected via get_hook_messages(). |
| heap_searchB | Search Java heap for live instances of a class |
| memory_writeB | Write bytes to memory address (for patching) |
| dump_classB | Dump all methods, fields, and constructors of a Java class |
| run_javaA | Run arbitrary Java code within Java.performNow context. Has access to Java.use(), Java.choose(), send(), etc. Return value is the result of the last expression. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 37 tools
Most tools have clearly distinct purposes (connecting, hooking, memory, files). However, some overlap exists: `get_pid` and `launch_app` both provide PIDs; `spawn_and_attach` duplicates `connect(spawn=True)`; `run_java` and `run_script` are similar. Descriptions help differentiate but confusion is possible.
Naming conventions are mixed: some tools use prefix_noun_verb (e.g., `android_get_current_activity`, `memory_read`), others use verb_noun (e.g., `list_apps`, `disconnect`), and some lack a clear pattern (e.g., `is_connected`). While prefixes like `android_`, `file_`, `memory_` provide consistency within groups, the overall pattern is not uniform.
37 tools is on the high side but still manageable. The server covers a broad domain (Frida-based mobile analysis) and each tool serves a specific purpose. However, some tools could be consolidated (e.g., multiple hooking variants, PID retrieval tools slightly redundant).
The tool set covers most core operations: connection/session management, file operations, memory manipulation, Java and native hooking, class introspection, and process control. Minor gaps exist (e.g., no direct tool for Java field modification or method call), but `run_java` provides a workaround. Overall, the surface is quite complete for its domain.