frida-mcp
Provides tools for mobile security testing on Android devices, including app lifecycle management via ADB, memory manipulation, and Java hooking to monitor method calls and bypass security features like SSL pinning.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@frida-mcp Search for 'crypto' classes in com.example.app and disable SSL pinning"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
frida-mcp
MCP server for Frida-based mobile security testing. Exposes Frida functionality as MCP tools for AI-assisted security research.
Requirements
Python 3.11+
Frida server running on target device
ADB access for Android devices
Rooted device (for most operations)
Related MCP server: Frida MCP Server
Install
cd frida-mcp
uv pip install -e .Build the Frida agent (required):
cd agent
npm install
npm run buildAdd to Claude Code
claude mcp add frida-mcp -- frida-mcpTools
Connection & Session Management
Tool | Description |
| List all available Frida devices (USB, remote, local) |
| List running processes on a device |
| List installed applications on a device |
| Attach to app by bundle ID, name, or PID. Supports |
| Disconnect from the current session |
| Check if Frida session is still alive and healthy |
| List all active Frida sessions (multi-device support) |
| Switch to a different active session by ID |
App Lifecycle (ADB-based)
Tool | Description |
| Get PID of a running app by package name |
| Launch app via ADB and return its PID |
| Force stop an app by package name |
| Force stop, launch fresh, and attach Frida in one step |
Memory Operations
Tool | Description |
| List all loaded modules (libraries) in the process |
| List exports (functions) from a specific module |
| Search process memory for hex pattern or string |
| Read memory at a specific address |
| Write bytes to memory address (for patching) |
| Get base address of a module by name (partial match) |
Android Java Hooking
Tool | Description |
| List loaded Java classes, optionally filtered |
| List methods of a Java class |
| Hook a Java method to monitor calls |
| Search for classes matching a pattern |
| Disable SSL certificate pinning |
| Get the current foreground activity |
| Dump all methods, fields, and constructors of a class |
| Search Java heap for live instances of a class |
Persistent Hooks
Tool | Description |
| Install a persistent hook script that collects messages |
| Retrieve collected messages from persistent hooks |
| Clear the hook message buffer |
| Unload all persistent hook scripts |
| List all installed persistent hooks |
| Hook a native function by module+offset |
File Operations
Tool | Description |
| List files in a directory on the device |
| Read a text file from the device |
| Download a file from device to local machine |
Custom Scripting
Tool | Description |
| Execute custom Frida JavaScript code |
| Run JavaScript within Java.performNow context |
Usage Example
1. list_devices → Find your device
2. connect target=com.example.app spawn=true → Attach to app
3. android_search_classes pattern=crypto → Find crypto classes
4. android_hook_method class_name=... method_name=... → Hook methods
5. get_hook_messages → See captured callsNotes
SELinux is automatically set to permissive mode when connecting (required for Frida injection on many devices)
The
spawn=trueoption uses ADB-based launch which is more reliable than Frida's native spawnMulti-session support allows attaching to multiple apps/devices simultaneously
Available Tools
37 toolsandroid_get_current_activityA
Get the current foreground activity
Inputs: no named parameters.
android_hook_methodA
Hook a Java method to monitor calls. Logs arguments, return values, and optionally backtraces.
Inputs: class_name (required), method_name (required), dump_args, dump_return, +1 more.
android_list_classesA
List loaded Java classes, optionally filtered by pattern
Inputs: pattern.
android_list_methodsB
List methods of a Java class
Inputs: class_name (required).
android_search_classesB
Search for Java classes matching a pattern
Inputs: pattern (required).
android_ssl_pinning_disableA
Disable SSL certificate pinning to allow traffic interception
Inputs: no named parameters.
clear_hook_messagesA
Clear the hook message buffer without retrieving
Inputs: no named parameters.
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.
Inputs: target (required), device_id, spawn, timeout_ms.
disconnectA
Disconnect from the current session
Inputs: no named parameters.
dump_classB
Dump all methods, fields, and constructors of a Java class
Inputs: class_name (required).
file_downloadB
Download a file from device to local machine
Inputs: remote_path (required), local_path (required).
file_lsB
List files in a directory on the device
Inputs: path.
file_readA
Read a text file from the device
Inputs: path (required).
get_hook_messagesB
Get collected messages from persistent hooks installed via install_hook
Inputs: clear.
get_module_baseA
Get base address of a module by name (partial match). Returns {module: {name, base, size, path}}
Inputs: name (required).
get_pidA
Get PID of a running app by package name. Useful before attaching with connect().
Inputs: package (required), device_id.
heap_searchB
Search Java heap for live instances of a class
Inputs: class_name (required), max_results.
hook_nativeA
Hook a native function by module+offset. Messages collected via get_hook_messages().
Inputs: module (required), offset (required), name.
install_hookA
Install a persistent hook script that stays active and collects messages. Use get_hook_messages to retrieve collected output.
Inputs: js_code (required), name.
is_connectedA
Check if Frida session is still alive and healthy. Returns connection status, PID, and device info.
Inputs: no named parameters.
launch_appA
Launch an app via adb and return its PID (smart wait - polls for process).
Inputs: package (required), activity, device_id, timeout_ms.
list_appsB
List installed applications on a device
Inputs: device_id.
list_devicesA
List all available Frida devices (USB, remote, local)
Inputs: no named parameters.
list_hooksA
List all installed persistent hooks with their names and indices
Inputs: no named parameters.
list_processesB
List running processes on a device
Inputs: device_id.
list_sessionsA
List all active Frida sessions. Supports multi-device workflows.
Inputs: no named parameters.
memory_list_exportsB
List exports (functions) from a specific module
Inputs: module_name (required).
memory_list_modulesA
List all loaded modules (libraries) in the process
Inputs: no named parameters.
memory_readA
Read memory at a specific address
Inputs: address (required), size (required).
memory_searchC
Search process memory for a pattern
Inputs: pattern (required), is_string.
memory_writeB
Write bytes to memory address (for patching)
Inputs: address (required), hex_bytes (required).
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.
Inputs: code (required).
run_scriptA
Execute custom Frida JavaScript code. Java bridge is auto-imported, so Java.perform(), Java.use(), etc. work directly.
Inputs: js_code (required).
spawn_and_attachA
Force stop app, launch fresh, and attach Frida. The reliable alternative to connect(spawn=True) which often times out.
Inputs: package (required), device_id, wait_ms.
stop_appB
Force stop an app by package name
Inputs: package (required), device_id.
switch_sessionA
Switch to a different active session by ID. Use list_sessions to see available sessions.
Inputs: session_id (required).
uninstall_hooksA
Unload all persistent hook scripts
Inputs: no named parameters.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
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.
Maintenance
Related MCP Connectors
MCP server for static security analysis of Android source code
Mozark's MCP server for AI-powered app testing: device access, test automation, and QA insights.
Security scanner for MCP servers. Detect vulnerabilities, prompt injection, and tool poisoning.
MCP server for building and testing AI agents with multi-model experimentation and insights.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceAn MCP-compliant server that enables AI systems to interact with mobile and desktop applications through Frida's dynamic instrumentation capabilities, allowing for process management, device control, JavaScript execution, and script injection.465MIT
- AlicenseBqualityCmaintenanceA comprehensive MCP server that exposes Frida's dynamic instrumentation toolkit to AI agents for process management, script injection, and memory operations. It provides over 50 tools to interact with local and mobile devices, enabling advanced capabilities like function hooking and memory analysis.55MIT
- AlicenseAqualityCmaintenanceA comprehensive MCP server for Frida dynamic instrumentation, enabling AI agents to manage devices, processes, scripts, memory, and ADB operations.3937MIT
- FlicenseNot gradedqualityDmaintenanceAn MCP server that enables AI models to perform Android dynamic analysis using Frida, including spawning and attaching to applications, listing apps, and injecting scripts.123-