fuzzmind-frida-mcp
Enables dynamic analysis of Android applications, including device management, script injection, process inspection, and frida-server installation/starting.
Provides tools for iOS app analysis, including device readiness checks and Frida-based instrumentation.
Offers dynamic analysis on Linux targets, including process attachment and memory inspection via Frida.
Supports macOS application security research with device management and script injection capabilities.
Click on "Install 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., "@fuzzmind-frida-mcpattach to process 1234 and list loaded modules"
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.
fuzzmind-frida-mcp
A Frida MCP server for authorized dynamic analysis and application security research. It exposes device/session management, script injection, process and memory inspection, runtime helpers, and platform-focused workflows for macOS, iOS, Android, Windows, Linux, and kernel targets.
Positioning
This is a broad Frida automation layer for FuzzMind research workflows, not a minimal general-purpose Frida wrapper. It is designed so MCP-capable agents can drive long-running Frida sessions, scripts, runtime APIs, platform workflows, and security recipes with structured tool calls.
The goal is close practical coverage of the Frida Python API, GumJS API, frida-tools workflows, Gadget setup, and common application-security research tasks. It does not claim byte-for-byte or 100% behavioral parity with every Frida CLI interaction, every language binding, or every future upstream API.
For standalone Frida users, the official frida, frida-trace, and
frida-tools CLI remain the smallest interface. This MCP is intentionally
larger because it is also meant to integrate with FuzzMind internal research
products and systems, including Mantis, Corvus, and others. These integrations
are optional and are not required to run this MCP.
Install
uv tool install fuzzmind-frida-mcp
# or
pip install fuzzmind-frida-mcpRequires Frida. Package dependencies install frida>=17.9.3,<18 and frida-tools>=14.8.1,<15.
Version support
Component | Supported version |
fuzzmind-frida-mcp | 0.1.0 |
Python | 3.11+ |
frida | 17.9.3 to <18 |
frida-tools | 14.8.1 to <15 |
Frida 17+ API users must bundle or provide ObjC/Java/Swift bridge packages when using those high-level runtimes. The MCP injects safe bridge stubs when bridge packages are unavailable, so runtime tools fail with explicit guidance instead of JavaScript ReferenceError.
The MCP runtime itself only needs Python Frida bindings and frida-tools. Node.js, TypeScript, and Rust Frida bindings are not required to run this server. ObjC/Java/Swift bridges are optional runtime packages for high-level target APIs; use frida_bridge_status to inspect them and frida_bridge_install to install them through official frida-pm when needed. By default these bridge packages are stored under ~/.fuzzmind/frida-mcp/frida-bridges (or FUZZMIND_FRIDA_BRIDGE_ROOT), so PyPI/uv installations do not need a writable source checkout.
Android frida-server helpers operate on a user-supplied frida-server binary; the MCP does not download platform binaries for you. Gadget helpers generate configs and stage assets, but signing, repackaging, and platform policy changes remain explicit external steps.
Quick start
Claude Code
claude mcp add frida -- fuzzmind-frida-mcpCodex / OpenCode / generic MCP
This server speaks standard MCP over stdio. It is not tied to Claude Code; use the same command with Codex, OpenCode, Claude Desktop, or any MCP client that can launch a stdio server.
{
"mcpServers": {
"frida": {
"command": "fuzzmind-frida-mcp"
}
}
}Run standalone
fuzzmind-frida-mcpWhen started by an MCP client, this runs as a stdio server and waits for client messages. When run directly from an interactive terminal, it prints a short usage note and exits so stdout is not polluted accidentally. For a local sanity check:
fuzzmind-frida-mcp --check
fuzzmind-frida-mcp --diagnose
fuzzmind-frida-mcp --versionTo force stdio server mode from a terminal:
fuzzmind-frida-mcp --stdioTool catalogue
Frida CLI option mapping
The MCP exposes Frida CLI-style controls as structured tool arguments instead of requiring an agent to build shell commands:
Frida CLI option | MCP surface |
| device/remote tools and |
|
|
|
|
|
|
|
|
|
|
|
|
Agent workflows
Tool | Description |
| First-step target snapshot for agents: process metadata, runtime bridges, modules, threads, range counts, and recommended next tools |
| Inspect local Frida, tool, device, and process-listing readiness |
| Check whether Frida 17 ObjC/Java/Swift bridge packages can be bundled |
| Install ObjC/Java/Swift bridge packages with official |
| Generate a Frida Gadget configuration |
| Generate a Gadget-compatible script template |
| Stage Gadget library, config, and optional script into a packaging directory |
| Check Android adb/frida-server readiness without modifying the device |
| Push a user-supplied frida-server binary to an Android device |
| Start frida-server on an Android device |
| Stop frida-server on an Android device |
| Install, start, and optionally port-forward frida-server |
| Create an adb TCP port forward for frida-server or Gadget |
| List adb TCP port forwards |
| Remove an adb TCP port forward |
| Summarize Android readiness for Frida app analysis |
| Summarize iOS/macOS USB-device readiness for Frida app analysis |
| Generate advanced GumJS templates for direct |
Official Frida APIs
Tool | Description |
| Resolve the first USB device with |
| Resolve Frida's default remote device |
| Find a device with a DeviceManager predicate |
| Add a remote device with certificate/origin/token/keepalive options |
| Remove a remote device from DeviceManager |
| Read |
| Set an official Device option override |
| Unpair a paired device |
| Send raw stdin bytes to a spawned target |
| Resolve a process with |
| Check |
| Inject a library from bytes with |
| Spawn with argv/env/envp/cwd/stdio/aux without attaching |
| List device-level pending spawns |
| List session child-gating pending children |
| Subscribe to DeviceManager, Device, or Session events |
| Read queued official event-subscription events |
| Remove an official event subscription |
| Attach to a device bus and queue bus messages |
| Post a bus message, optionally with binary data |
| Read queued bus events |
| Drop a bus event queue |
| Enable official session child gating |
| Disable official session child gating |
| Resume a session through |
| Check |
| Configure peer connection / relay support |
| Join a PortalService from a session |
| Terminate a portal membership |
| Load compiled script bytes |
| Compile script source through the active session |
| Build a Frida script snapshot |
| List exported RPC methods |
| Enable script debugger |
| Disable script debugger |
| Post a message with binary data to a script |
| Queue Script log handler events |
| Read queued Script log events |
| Inspect the active Script log handler |
| Reset Script logging to the Frida default |
| Build a bundle with |
| Start |
| Read queued compiler watch events |
| Stop tracking a compiler watch |
| Search Frida packages with PackageManager |
| Install Frida packages with PackageManager |
| Read |
| Start a PortalService with EndpointParameters |
| Stop a PortalService |
| Broadcast through a PortalService |
| Narrowcast through a PortalService tag |
| Post to one PortalService connection |
| Tag a PortalService connection |
| Remove a PortalService tag |
| List PortalService connection tags |
| Read PortalService events |
| Open a device service and send one request |
| Open a raw device channel readiness probe |
| Open a raw device channel for repeated IO |
| Read bytes from an open device channel |
| Write bytes to an open device channel |
| Close an open device channel |
| Open a device service for repeated requests/events |
| Send a request through an open service |
| Read queued service events |
| Cancel and forget an open service |
| Snapshot/query modules with GumJS ModuleMap |
| Copy memory with |
| Scan memory synchronously |
| Validate a code pointer |
| Duplicate memory with |
| Load a module with |
| Force module initialization |
| Resolve a global export by name |
| Observe thread add/remove events |
| Observe module load/unload events |
| Evaluate code with GumJS |
| Load code with GumJS |
| Register a GumJS source map |
| Flush Interceptor changes |
| Revert an Interceptor replacement |
| Call a native function with SystemFunction |
| Set/unset a hardware breakpoint |
| Set/unset a hardware watchpoint |
| Generate CodeWriter/Relocator templates |
| Enumerate kernel ranges |
| Enumerate kernel module ranges |
| Allocate kernel memory |
| Change kernel memory protection |
| Install a temporary Stalker call probe |
| Invalidate Stalker translations |
| Compile a GumJS RustModule |
| Compute a GumJS Checksum over memory |
| Generate a GumJS Worker template |
| Generate a GumJS Sampler template |
| Enumerate Java class loaders |
| Find live Java instances |
| Capture Java backtrace frames |
| Trigger Java deoptimization |
| Generate an ObjC.implement template |
| Bind host data to an ObjC object |
Device management
Tool | Description |
| List all available Frida devices (USB, remote, local) |
| Get info about a specific Frida device or the default local device |
| Add a remote Frida server with official DeviceManager options |
| List all installed applications on a device (not just running) |
| Get the frontmost (foreground) application on a device |
| Spawn and resume an application by bundle/package identifier |
| Kill a process by PID or name on a device |
| Resume a suspended process by PID |
Session lifecycle
Tool | Description |
| Connect/attach/spawn/await a target and create a persistent Frida session |
| Wait for a gated spawn matching a pattern, optionally attach and resume |
| Disconnect from the current or a specified Frida session |
| List all active Frida sessions |
| Switch the active Frida session |
| Check if the current Frida session is alive |
| Read lifecycle events such as detach/crash/disconnect |
| Clear lifecycle events for a persistent session |
| Recover a broken/crashed Frida session by re-attaching |
| Execute arbitrary JS in an existing persistent Frida session (REPL) |
Long-running scripts and RPC
Tool | Description |
| Load a long-running Frida script with runtime, parameters, debugger, and error policy options |
| Load a local JavaScript file as a long-running Frida script with the same script options |
| List scripts loaded in a persistent session |
| Unload a long-running script by script id |
| Reload a long-running script while preserving name and kind |
| Call a function exposed through |
| Post a JSON-serialisable message to a long-running script |
| Read queued events emitted by long-running scripts |
| Clear queued events for one script or a whole session |
| Export queued script events to JSON or JSONL |
Hooks
Tool | Description |
| Install a persistent hook and return its script id |
| Get queued events from persistent hook scripts |
| Clear hook event queues for the active session |
| Unload all persistent hook scripts in the current session |
| List all installed persistent hooks in the current session |
| Hook a native function by module name + hex offset |
| Hook a native function by address using Interceptor.attach |
Memory
Tool | Description |
| Read raw memory from a target process |
| Write raw bytes to process memory |
| Scan process memory for a hex pattern |
| Change memory protection on a region |
| Enumerate memory ranges matching a protection filter |
| Get base address of a module by name (partial match) |
| Dump all readable memory regions from a target process to disk |
| Dump a live in-memory module image to disk |
| Allocate memory inside a target process via Memory.alloc |
| Patch executable code at an address using Memory.patchCode |
| Query memory protection at a specific address |
| Allocate a string inside a target process |
| Monitor memory accesses (read/write/execute) on specified ranges |
| Read a typed value from process memory |
| Write a typed value to process memory |
| Formatted hex dump of memory at an address |
| Duplicate memory with GumJS |
Process introspection
Tool | Description |
| Verify frida + frida-tools install state and version |
| Enumerate running processes via Frida's local device |
| Get detailed process metadata (pid, arch, platform, etc.) |
| List all threads with state and registers |
| List all loaded modules in a target process |
| List exported symbols from a specific module |
| Enumerate imports of a module |
| List all symbols (not just exports) from a module |
| Enumerate sections (name, base, size, protection) of a module |
| Enumerate dependencies of a module |
| Enumerate malloc heap ranges filtered by memory protection |
| Find a single export by name, optionally scoped to a module |
| Find a symbol by name within a module |
| Resolve a debug symbol from an address |
| Find all functions with an exact name |
| Find functions matching a glob pattern |
| Load debug symbols from a file (e.g. dSYM) |
Interceptor
Tool | Description |
| Hook a specific ObjC method via Interceptor and log invocations |
| Replace a native function entirely using Interceptor.replace |
| Spoof the return value of a function |
| Trace call stacks for a specific function, symbolicated |
Stalker
Tool | Description |
| Collect basic-block coverage using Frida Stalker |
| Configure and start Stalker with advanced options on a specific thread |
| Enable spawn gating to intercept all new process spawns |
| Monitor child process creation by hooking spawn/fork/exec APIs |
| Run official |
| Run official |
Script injection
Tool | Description |
| Run a local Frida JS script against a process with runtime/parameters options |
| Evaluate inline JavaScript against a target |
| Compile a Frida JS script with |
| Parse a Frida CLI |
| Run an official frida-tools CodeShare script via |
| Inject a script and eternalize it so it survives session detach |
| Compile inline C code and load it via CModule, with optional toolchain selection |
| Call a native function by address inside a target process |
| Inject a shared library (.dylib / .so) into a target process |
| frida-trace function-tracing capture for N seconds |
Objective-C
Tool | Description |
| Enumerate ObjC class names matching a pattern |
| Find live ObjC instances of a class on the heap |
| Register a new ObjC class at runtime |
| Create an ObjC block at runtime |
| Schedule JavaScript on the ObjC main thread dispatch queue |
| Inspect an ObjC object at a given address |
| Call an ObjC method on an object at a given address |
| List all registered ObjC protocols |
| Dump full ObjC class structure: methods, protocols, ivars |
| xpcspy-style XPC message capture |
Swift
Tool | Description |
| Demangle a Swift symbol using the in-process Swift runtime |
| Resolve API symbols using Frida's ApiResolver |
Java / Android Runtime
Tool | Description |
| Enumerate loaded Java/ART classes |
| List declared methods of a Java class |
| Hook all overloads of a Java method |
| Execute arbitrary JS inside a Java.perform() block |
| Dynamically load a DEX file into an Android process |
Security bypass
Tool | Description |
| Universal SSL pinning bypass (Android + iOS/macOS) |
| Extract TLS session keys for Wireshark decryption |
| Hook crypto APIs to capture encryption/decryption operations |
| Sniff strings as they are created at runtime |
| Warp time perception for a target process |
| Bypass root/jailbreak detection |
| Bypass debugger detection mechanisms |
File system
Tool | Description |
| List files in a directory on the target's filesystem |
| Read a file from the target's filesystem view |
| Download a file from the target to the local host |
| Write data to a file on the target's filesystem |
| Read bytes from a file at a specific offset |
Database
Tool | Description |
| Open a SQLite database and list tables |
| Execute SQL against a SQLite database inside the target |
| Full schema + data dump of a SQLite database |
Network
Tool | Description |
| Open a TCP/UDP connection from within the target process |
| Open a listening socket inside the target process |
Cloak
Tool | Description |
| Hide a thread from in-process detection |
| Hide a memory range from detection |
| Hide a file descriptor from detection |
Profiler
Tool | Description |
| Start profiling specific addresses |
| Retrieve the profiler report |
| Disassemble a single instruction at an address |
Kernel
Tool | Description |
| Read kernel memory at an address |
| Write raw bytes to kernel memory |
| Scan kernel memory for a hex pattern |
| Enumerate kernel modules (kexts) |
Windows platform
Tool | Description |
| Hook Win32 APIs and log call arguments |
| Enumerate .NET assemblies loaded in a target process |
| Hook a .NET method and log invocations |
| Monitor Registry operations |
| Intercept a COM vtable method call |
| Patch EtwEventWrite to neutralise ETW event logging |
| Hook CryptoAPI and BCrypt encryption/decryption |
| Patch AmsiScanBuffer to bypass AMSI scanning |
| Detect process hollowing via PE section comparison |
Android platform
Tool | Description |
| Hook ContentResolver operations for a specific authority |
| Intercept Intent dispatching |
| Dump SharedPreferences key-value pairs |
| Hook WebView methods to capture JS bridge interactions |
| Hook JNI functions in libart.so |
iOS / macOS platform
Tool | Description |
| Dump accessible Keychain items from a target process |
| Disable App Transport Security for a target process |
| Hook URL scheme and Universal Link handling |
Linux platform
Tool | Description |
| Hook libc syscall wrappers and log arguments |
| Detect LD_PRELOAD and suspicious library injections |
| Intercept D-Bus method calls and messages |
| Overwrite a GOT/PLT entry for a function in a target module |
| Detect seccomp sandbox status in a target process |
Misc
Tool | Description |
| Install an in-process exception handler to catch crashes |
| Execute JavaScript on a specific thread |
| Search the heap for live ObjC instances of a class |
Platform support
Platform | Capabilities |
Cross-platform | Script/session lifecycle, RPC, event queues, process, memory, hooks, stalker, interceptor, ObjC, Swift, Java, files, DB, network, cloak, profiler, kernel, agent workflows |
macOS / iOS | ObjC runtime, XPC interception, Keychain, ATS bypass, URL schemes, SSL pinning, code signing |
Android | Java/ART bridge, JNI hooks, Intent interception, ContentProvider, WebView, SharedPrefs, root bypass |
Windows | Win32 API monitoring, .NET/CLR, COM interception, Registry, ETW bypass, AMSI bypass, CryptoAPI, hollowing detection |
Linux | Syscall hooks, LD_PRELOAD detection, D-Bus interception, GOT/PLT hooks, seccomp detection |
Kernel | Kernel memory read/write/scan, kext enumeration |
Capability summary
Feature | Support |
Tool catalogue | Registered MCP tools for Frida workflows |
Persistent sessions and scripts | Yes |
RPC exports | Long-running scripts can expose callable functions through |
Event queues | Script and hook events are stored per |
Platform-focused workflows | macOS/iOS, Android, Windows, Linux, kernel |
Process and module introspection | Yes |
Memory operations | Read, write, scan, protect, dump, typed access |
Native instrumentation | Interceptor, Stalker, CModule, NativeFunction |
Official Frida APIs | DeviceManager, Device, Bus, Session, Script, Compiler, PackageManager, PortalService, peer connection, ModuleMap, SystemFunction, Thread hardware break/watchpoints, Worker, RustModule, Checksum, Sampler |
Runtime helpers | ObjC, Java/ART, Swift, .NET-oriented workflows |
Files and databases | Target-side file access and SQLite helpers |
Agent workflow entrypoint | Target snapshot with recommended next tools |
Bidirectional messaging |
|
macOS attach permissions
Frida attaches through task ports, and macOS can deny that for several independent reasons. SIP is only one of them. Even with SIP fully disabled, attach may still fail if the terminal/Python host lacks Developer Tools/debugging permission, the target is a protected platform binary, the process is sandboxed, architectures do not match, or the host environment hides the process list.
For normal development, prefer self-built test apps or explicitly authorized apps first. Avoid using Apple system binaries such as /bin/sleep as the first attach probe; they are platform-signed and can be denied even when launched by your own user. If a self-built target fails, fix local debugging permission before changing SIP. System daemons and Apple platform binaries may require reduced SIP debug restrictions, but that still does not guarantee attach on every target.
Useful checks:
Run
frida_checkto confirm Python Frida and frida-tools are installed.Run
frida_host_diagnosticsfrom the same shell or MCP client that will run Frida. On macOS it reports Developer Tools status, task-port AuthorizationDB checks, the active Python executable, and whether that Python shows debugger-related code-signing entitlements.Run
frida_list_devicesandfrida_list_processes; an empty process list usually points to host permission or sandboxing.Try a self-built process with
frida_connect(..., spawn=True)before targeting system services.On macOS, grant the terminal or Python runner Developer Tools/debugging permission in System Settings when prompted.
If self-built spawn/attach fails with unable to access process ... from the current user account, treat it as a local macOS debug-permission issue first. Check DevToolsSecurity -status, the _developer group, and the code-signing entitlements of the Python interpreter used by fuzzmind-frida-mcp or frida. The official Frida troubleshooting notes cover macOS task-port authorization: https://frida.re/docs/troubleshooting/
Common lab-only recovery steps:
sudo DevToolsSecurity -enable
sudo dseditgroup -o edit -a "$USER" -t user _developerRestart the terminal or MCP client after changing Developer Tools permissions. If AuthorizationDB task-port checks still fail on a dedicated research host, follow the Frida troubleshooting guidance for system.privilege.taskport. If the Python host remains the blocker, use a disposable pyenv/venv Python for Frida work and sign that interpreter with debugger entitlements rather than changing the system Python.
For release validation, use official Frida packages in a clean project venv and run the real smoke tests with FUZZMIND_FRIDA_REAL_ATTACH=1. These tests require native Frida spawn/attach for a self-built target.
Repository layout
Path | Purpose |
| CLI entrypoint and FastMCP startup only |
| MCP-facing tool functions grouped by exposed surface: lifecycle, instrumentation, runtimes, platform, data, recipes |
| Implementation modules used by MCP-facing tools |
| Thin wrappers around official Frida Python/GumJS APIs, grouped by upstream object |
| Device, process, session, and script lifecycle workflows |
| Memory, hook, Interceptor, Stalker, Kernel, Cloak, and profiler helpers |
| Java, ObjC, and Swift runtime workflows |
| Android, iOS/macOS, Linux, and Windows focused workflows |
| File, database, and socket helpers |
| Higher-level security and environment workflows |
The official/ package is intentionally separate from high-level workflow modules. For example, tools/official/device.py follows official DeviceManager/Device APIs, while tools/lifecycle/device.py exposes Agent-friendly workflows built on top of Frida.
Contributing
PRs welcome. Please read the CONTRIBUTING document first:
Keep one MCP-facing function per tool and register grouped surfaces through
src/fuzzmind_frida_mcp/toolsets/Put official API thin wrappers under
src/fuzzmind_frida_mcp/tools/official/Add platform-specific tools to the appropriate
src/fuzzmind_frida_mcp/tools/platform/moduleCross-platform implementation tools go in the matching grouped package (
instrumentation/,lifecycle/,runtimes/,data/, orrecipes/)
License
MIT — Copyright (c) 2026 FuzzMind Security Lab
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/fuzzmind/frida-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server