Skip to main content
Glama
cbxss
by cbxss
README.md
# 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)

## Install

```bash
cd frida-mcp
uv pip install -e .
```

Build the Frida agent (required):

```bash
cd agent
npm install
npm run build
```

## Add to Claude Code

```bash
claude mcp add frida-mcp -- frida-mcp
```

## Tools

### Connection & Session Management

| Tool | Description |
|------|-------------|
| `list_devices` | List all available Frida devices (USB, remote, local) |
| `list_processes` | List running processes on a device |
| `list_apps` | List installed applications on a device |
| `connect` | Attach to app by bundle ID, name, or PID. Supports `spawn=true` for fresh launch. |
| `disconnect` | Disconnect from the current session |
| `is_connected` | Check if Frida session is still alive and healthy |
| `list_sessions` | List all active Frida sessions (multi-device support) |
| `switch_session` | Switch to a different active session by ID |

### App Lifecycle (ADB-based)

| Tool | Description |
|------|-------------|
| `get_pid` | Get PID of a running app by package name |
| `launch_app` | Launch app via ADB and return its PID |
| `stop_app` | Force stop an app by package name |
| `spawn_and_attach` | Force stop, launch fresh, and attach Frida in one step |

### Memory Operations

| Tool | Description |
|------|-------------|
| `memory_list_modules` | List all loaded modules (libraries) in the process |
| `memory_list_exports` | List exports (functions) from a specific module |
| `memory_search` | Search process memory for hex pattern or string |
| `memory_read` | Read memory at a specific address |
| `memory_write` | Write bytes to memory address (for patching) |
| `get_module_base` | Get base address of a module by name (partial match) |

### Android Java Hooking

| Tool | Description |
|------|-------------|
| `android_list_classes` | List loaded Java classes, optionally filtered |
| `android_list_methods` | List methods of a Java class |
| `android_hook_method` | Hook a Java method to monitor calls |
| `android_search_classes` | Search for classes matching a pattern |
| `android_ssl_pinning_disable` | Disable SSL certificate pinning |
| `android_get_current_activity` | Get the current foreground activity |
| `dump_class` | Dump all methods, fields, and constructors of a class |
| `heap_search` | Search Java heap for live instances of a class |

### Persistent Hooks

| Tool | Description |
|------|-------------|
| `install_hook` | Install a persistent hook script that collects messages |
| `get_hook_messages` | Retrieve collected messages from persistent hooks |
| `clear_hook_messages` | Clear the hook message buffer |
| `uninstall_hooks` | Unload all persistent hook scripts |
| `list_hooks` | List all installed persistent hooks |
| `hook_native` | Hook a native function by module+offset |

### File Operations

| Tool | Description |
|------|-------------|
| `file_ls` | List files in a directory on the device |
| `file_read` | Read a text file from the device |
| `file_download` | Download a file from device to local machine |

### Custom Scripting

| Tool | Description |
|------|-------------|
| `run_script` | Execute custom Frida JavaScript code |
| `run_java` | 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 calls
```

## Notes

- SELinux is automatically set to permissive mode when connecting (required for Frida injection on many devices)
- The `spawn=true` option uses ADB-based launch which is more reliable than Frida's native spawn
- Multi-session support allows attaching to multiple apps/devices simultaneously

TDQS

B3.4/5.0

Scored across 37 tools

Disambiguation4/5

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 Consistency3/5

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.

Tool Count3/5

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).

Completeness4/5

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

ActivityInactive
ResponsivenessNo issues