ya-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": true
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| extensions | {
"io.modelcontextprotocol/ui": {}
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| frida_ls_devicesA | List all available Frida devices (local, USB, remote). |
| frida_get_deviceA | Get info for a specific device. Uses default device if ID is omitted. |
| frida_add_remoteB | Connect to a remote Frida server (frida-server over TCP). |
| frida_remove_remoteB | Disconnect from a remote Frida server. |
| frida_query_system_parametersB | Returns a dictionary of information about the host system. Args: device_id: Target device. Uses default if omitted. |
| frida_enable_spawn_gatingA | Enable spawn gating on the device. When enabled, newly spawned processes are suspended until explicitly resumed. Args: device_id: Target device. Uses default if omitted. |
| frida_disable_spawn_gatingA | Disable spawn gating on the device. Args: device_id: Target device. Uses default if omitted. |
| frida_enumerate_pending_spawnB | List pending spawned processes that are waiting to be resumed. Args: device_id: Target device. Uses default if omitted. |
| frida_enumerate_pending_childrenA | List pending child processes that are waiting to be resumed. Args: device_id: Target device. Uses default if omitted. |
| frida_inject_library_fileA | Inject a native library file (.so/.dylib) into a process. Args: pid: Target process PID. path: Absolute path to the library on the device. entrypoint: Name of the entry function in the library. data: String argument passed to the entrypoint. device_id: Target device. Uses default if omitted. |
| frida_inject_library_blobA | Inject a native library from memory (base64-encoded binary) into a process. Args: pid: Target process PID. blob_base64: Base64-encoded library binary. entrypoint: Name of the entry function in the library. data: String argument passed to the entrypoint. device_id: Target device. Uses default if omitted. |
| frida_psA | List running processes on a device (frida-ps equivalent). Returns PID and name for each process. Args: device_id: Target device. Uses default if omitted. scope: Enumeration scope — "minimal", "metadata", or "full". When "full", includes parameters (path, user, ppid, started). pids: Optional list of PIDs to filter by. |
| frida_spawnA | Spawn a new process and optionally attach to it. Args: program: Path or bundle identifier to spawn. device_id: Target device. Uses default if omitted. auto_resume: Whether to resume the process after attaching. argv: Command-line arguments for the spawned process. env: Environment variables as key-value pairs. cwd: Working directory for the spawned process. stdio: Standard I/O mode — "inherit", "pipe", or "redirect". Note:
If spawn times out on Android, call |
| frida_attachA | Attach to a running process by PID or name. Args: pid: Process PID (int). name: Process name (str). identifier: Application bundle identifier (str). frontmost: Attach to the frontmost application. device_id: Target device. Uses default if omitted. realm: Session realm — "native" or "emulated". |
| frida_detachC | Detach from a process session. |
| frida_killC | Kill a process by PID. |
| frida_resumeC | Resume a suspended process. |
| frida_list_sessionsA | List all active session PIDs. |
| frida_ls_appsA | List installed applications on a device (frida-ls equivalent). Returns identifier, name, and PID (if running). Args: device_id: Target device. Uses default if omitted. scope: Enumeration scope — "minimal", "metadata", or "full". When "full", includes parameters (version, build, etc.). identifiers: Optional list of bundle identifiers to filter by. |
| frida_ls_apps_runningA | List only currently running applications. Args: device_id: Target device. Uses default if omitted. scope: Enumeration scope — "minimal", "metadata", or "full". identifiers: Optional list of bundle identifiers to filter by. |
| frida_get_frontmost_applicationA | Get details about the frontmost application. Args: device_id: Target device. Uses default if omitted. scope: Enumeration scope — "minimal", "metadata", or "full". |
| frida_injectA | Inject a JavaScript snippet into a process. The process must already have an active session (use frida_attach first). IMPORTANT: The default runtime is QJS (QuickJS), which is lightweight but does NOT include the Java/ObjC bridges. If your script uses Java.perform(), Java.use(), ObjC.classes, or any Java/Objective-C APIs, you MUST set runtime="v8". Always use runtime="v8" for Android Java hooking. Args: pid: Target process PID. source: JavaScript source code to inject. runtime: Script runtime — "qjs" (default, no Java/ObjC bridge) or "v8" (full runtime with Java/ObjC bridge support). Returns: script_id for subsequent RPC calls or unloading. |
| frida_rpc_callA | Call an RPC export on an injected script. The script must expose methods via Args: script_id: ID returned by frida_inject. method: Export method name (snake_case in Python, camelCase in JS). args: Positional arguments to pass. |
| frida_unload_scriptB | Unload a previously injected script. |
| frida_get_messagesA | Retrieve and drain pending messages from an injected script. Messages are produced by |
| frida_list_scriptsA | List all active script IDs. |
| frida_enumerate_modulesA | Enumerate loaded modules in a process. Injects a helper script to call Process.enumerateModules(). Requires an active session for the given PID. Args: pid: Target process PID (must have active session). name_filter: Optional substring filter on module name (case-insensitive). Use this to avoid returning hundreds of modules at once. |
| frida_enumerate_exportsB | Enumerate exports of a specific module. Args: pid: Target process PID (must have active session). module_name: Name of the module to inspect. |
| frida_list_exportsB | List RPC exports available on an injected script. Args: script_id: ID returned by frida_inject. |
| frida_post_messageA | Post a message to an injected script. Args: script_id: ID returned by frida_inject. message: JSON-serializable message to send. data: Optional base64-encoded binary data. |
| frida_enable_child_gatingA | Enable child gating on a session. When enabled, child processes created by the target are suspended until explicitly resumed. Args: pid: Target process PID (must have active session). |
| frida_disable_child_gatingA | Disable child gating on a session. Args: pid: Target process PID (must have active session). |
| frida_compile_scriptA | Compile a script to bytecode without loading it. Args: pid: Target process PID (must have active session). source: JavaScript source code to compile. runtime: Script runtime — "qjs" (default, no Java/ObjC) or "v8" (full runtime with Java/ObjC bridge). Returns: Base64-encoded bytecode. |
| frida_snapshot_scriptA | Create a snapshot of a script for fast future loading. Args: pid: Target process PID (must have active session). embed_script: JavaScript source to embed in the snapshot. warmup_script: Optional script to run during snapshot creation. runtime: Script runtime — "qjs" (default, no Java/ObjC) or "v8" (full runtime with Java/ObjC bridge). Returns: Base64-encoded snapshot data. |
| frida_eternalize_scriptA | Eternalize a script so it persists after detaching from the session. Args: script_id: ID returned by frida_inject. |
| frida_memory_readA | Read bytes from process memory. Args: pid: Target process PID (must have active session). address: Hex address string (e.g. "0x7fff12340000"). size: Number of bytes to read. |
| frida_memory_writeA | Write bytes to process memory. Args: pid: Target process PID (must have active session). address: Hex address string (e.g. "0x7fff12340000"). hex_data: Hex-encoded bytes to write (e.g. "deadbeef"). |
| frida_memory_scanA | Scan process memory for a byte pattern. Args: pid: Target process PID (must have active session). address: Start address (hex string). size: Number of bytes to scan. pattern: Frida-style pattern (e.g. "48 8b ?? 00"). |
| frida_memory_protectC | Change memory protection flags. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| frida_hook_function | Template for hooking a native function with Interceptor. |
| frida_trace_calls | Template for tracing function calls with Stalker. |
| frida_hook_java | Template for hooking Java methods on Android. |
| frida_hook_objc | Template for hooking Objective-C methods on iOS. |
| frida_android_usb_setup | Workflow: set up frida-server on an Android device connected via USB. |
| frida_enumerate_and_dump | Workflow: enumerate modules then dump exports. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| devices_resource | Live list of all connected Frida devices. |
| sessions_resource | Current active sessions and scripts. |
TDQS
Scored across 39 tools
Most tools have clearly distinct purposes, but a few pairs could cause confusion: frida_inject (JS) vs frida_inject_library_file/blob (native library), and frida_list_exports vs frida_enumerate_exports (RPC vs module exports). Descriptions are detailed enough to resolve ambiguity, so only minor overlap exists.
All tools share the frida_ prefix and use snake_case, but the verb style is inconsistent (ls vs list vs enumerate vs get). For example, frida_ls_devices vs frida_list_sessions, and frida_enumerate_exports vs frida_list_exports. Overall still readable and predictable.
39 tools is heavy, but the server aims to cover Frida's broad dynamic instrumentation surface across device, process, script, and memory domains. Most tools are distinct, but the count exceeds the 25-tool threshold, making it feel somewhat bloated.
The tool surface covers core Frida workflows: device/process discovery, attach/spawn, script injection with RPC and messaging, module/export enumeration, and memory read/write/scan/protect. No obvious critical gaps that would prevent an agent from accomplishing typical dynamic instrumentation tasks.