frida-mcp
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., "@frida-mcpSpawn and instrument com.example.app to bypass 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
TypeScript MCP server for Frida 17 dynamic instrumentation. Provides ~62 tools and 15 resources for attaching to processes, executing scripts, hooking native and Java methods, bypassing SSL pinning and root detection, reading/writing memory, inspecting Java heaps, exporting large captures to disk, pulling APKs and decompiling them with jadx, and searching Frida 17 API documentation — all through the Model Context Protocol.
What's new in 1.1.0
Bootstrap: one-call
ensure_frida_server(arch-detect + download + push + launch) andspawn_and_instrument(atomic spawn → attach → load → resume) that beats the AndroidActivityManagerService10s timeout.Recipe library: parameterised hook templates for OkHttp, Java method, native export, class trace,
Mac.doFinal, SSL pinning bypass and root-detection bypass. Recipes install asynchronously soscript.load()returns in <100ms; subscribe onrecipe.installedviasubscribe_messages.Source-side filter: every recipe accepts a
wherepredicate evaluated in the agent (host-side blocklist against loops/eval/Function + 50ms agent watchdog), plus a globalset_session_filter.Static analysis bridge:
apk_pull,apk_manifest,decompile_class,decompile_method,list_native_exports,process_inventory,source_jumpclose the loop between a captured runtime stack frame and the decompiled.java.Anti-detection helpers:
check_frida_detectionenumerates against RootBeer / SafetyNet / Play Integrity / Xposed;bypass_root_detectionis opt-in.Real fixes to existing tools:
list_classesanddump_classnow return data on Frida 17.9.x (object-callbackJava.enumerateLoadedClasses+ Promise-aware execution wrapper);trace_class_methodsno longer infinite-recurses (closure-captured overload pattern); session detach now unloads scripts;subscribe_messageslong-poll cannot leak listeners.
See CHANGELOG.md for the full list.
Related MCP server: Frida MCP Server
Setup
Quick install (Claude Code)
claude mcp add frida-mcp -- npx -y frida-mcp@latestInstalls frida-mcp as an MCP server over stdio. Auto-updates on every Claude Code restart.
Scopes:
# Per-user (available in all projects)
claude mcp add --scope user frida-mcp -- npx -y frida-mcp@latest
# Per-project (shared via .mcp.json, commit to repo)
claude mcp add --scope project frida-mcp -- npx -y frida-mcp@latestManual .mcp.json config
{
"mcpServers": {
"frida": {
"command": "npx",
"args": ["-y", "frida-mcp@latest"]
}
}
}From source (development)
npm install
npm run fetch-docs # build docs index (optional but recommended)
npm run build
npm startThen point .mcp.json at the local build:
{
"mcpServers": {
"frida": {
"command": "node",
"args": ["/path/to/frida-mcp/dist/index.js"]
}
}
}Restart Claude Code to pick up the new server.
Prerequisites
Node.js 20+
Frida 17 (
npm install frida@17)A USB-connected device (Android phone) for on-device operations
frida-serverrunning on the target device
Tool Reference
Device Tools (4)
Tool | Description | Key Params |
| List all Frida-visible devices (local, USB, remote) | — |
| Get a specific device by ID |
|
| Get the USB-connected device | — |
| Get the local (host) device | — |
Process Tools (6)
Tool | Description | Key Params |
| List all running processes |
|
| Find process by name (case-insensitive substring) |
|
| Lightweight attach check |
|
| Spawn a new process |
|
| Resume a spawned/suspended process |
|
| Kill a process |
|
Session Tools (5)
Tool | Description | Key Params |
| Attach and create a managed session (spawn fallback is opt-in) |
|
| Execute JS in session (transient or persistent) |
|
| Retrieve queued messages with pagination (previews; blobs for large fields) |
|
| Read an offloaded message blob (payload/data) in bounded chunks |
|
| List archived messages that were cleared/evicted from memory |
|
Script Management Tools (4)
Tool | Description | Key Params |
| Load JS file from disk, auto-detect RPC exports |
|
| List loaded scripts with metadata |
|
| Unload a script |
|
| Call an RPC-exported method |
|
Beginner: load_script vs call_rpc_export
If you are new to Frida, think about this in two layers:
load_script: put your agent code inside the target app and keep it running.call_rpc_export: call one function from that already-loaded agent.
Simple rule:
You usually call
load_scriptonce.You can call
call_rpc_exportmany times after that.When finished, call
unload_script.Use
export_capture_bundleinstead when the result size is unknown or you want a host-side file for later analysis.
Minimal flow:
1) create_interactive_session(...) -> session_id
2) load_script(session_id, "agent.js") -> script_id
3) call_rpc_export(session_id, script_id, "methodName", [...args]) -> result
4) unload_script(session_id, script_id)Export Tools (1)
Tool | Description | Key Params |
| Export RPC output and captured messages to a disk JSONL bundle (token-safe summary response) |
|
export_capture_bundle is the preferred path for large or unbounded output. By default it returns a slim path_only response and writes the full capture to disk on the host machine.
Memory Tools (6)
Tool | Description | Key Params |
| List loaded native modules |
|
| Find module by name |
|
| List exported symbols from a module |
|
| Hex dump at address (supports |
|
| Write bytes to address (auto memory protection) |
|
| Search readable memory for hex/string patterns |
|
Java Tools (6)
Tool | Description | Key Params |
| Enumerate loaded Java classes (max 500) |
|
| Find live heap instances via |
|
| List all methods of a Java class with types/modifiers |
|
| Full class introspection (methods, fields, constructors, interfaces, superclass) |
|
| Execute arbitrary code inside |
|
| Hook a Java method (all overloads), log args/retval/backtrace |
|
Native Hook Tools (2)
Tool | Description | Key Params |
| Install persistent |
|
| One-shot backtrace capture (self-detaches) |
|
Android Tools (6)
Tool | Description | Key Params |
| Bypass SSL pinning (TrustManager, SSLContext, OkHttp, TrustManagerImpl) |
|
| Get foreground activity via ActivityThread reflection |
|
| List installed applications (identifier, name, PID) |
|
| Check Android frida-server health (running instances, version mismatch warnings) |
|
| List directory contents on target device (Java File API) |
|
| Read a text file from target device |
|
Documentation Tools (1)
Tool | Description | Key Params |
| Full-text search Frida 17 API docs (size-safe paginated snippets) |
|
Bootstrap Tools (2)
Tool | Description | Key Params |
| Detect device arch, download (opt-in) matching |
|
| Atomically |
|
Recipe Tools (8)
Vetted, parameterised hook templates so you do not have to write 100+ lines of Frida JS for every common task. All recipes defer their hook installation via Script.nextTick so script.load() returns immediately; long-poll subscribe_messages on the recipe.installed event to wait for hooks to be live. All recipes accept a where predicate that gates send() in the agent.
Tool | Description | Key Params |
| Snoop every finalized |
|
| Hook all overloads of a Java method with source-side |
|
|
|
|
|
|
|
| Hook both overloads of |
|
| TrustAllCerts + null hostname verifier + OkHttp3 |
|
| Free-text search the local recipe registry. |
|
| Return parameter schema + emitted event types for a recipe by slug. |
|
Plus two helpers wired through the same machinery:
Tool | Description | Key Params |
| Install / clear a global JS predicate that gates every recipe's |
|
| Long-poll for new session messages. Resolves as soon as N matching messages exist or after |
|
Static Analysis Tools (7)
Bridge between Frida's runtime view and the APK's static source. Shell out to adb, aapt2, jadx, nm / readelf.
Tool | Description | Key Params |
|
|
|
|
|
|
| jadx full-class decompile (cached per APK fingerprint). Inner classes via outer file. |
|
| Slice one method out of the decompiled class. Skips |
|
|
|
|
| One-shot: loaded native modules + user-namespace Java classes + detected networking stack(s) + anti-detection-lib hits. |
|
| Parse a Java stack trace and return a |
|
Anti-Detection Tools (2)
Tool | Description | Key Params |
| Enumerate loaded classes against known detection-lib patterns (RootBeer, SafetyNet, Play Integrity, Xposed, plus keyword |
|
| Opt-in: patch |
|
Resources
URI | Description |
| Installed Frida version |
| USB device process list |
| All available devices |
| Documentation section listing |
| Individual doc section (11 sections) |
Architecture
src/
├── index.ts # Entry point — McpServer + StdioServerTransport
├── state.ts # SessionManager singleton (sessions, scripts, messages)
├── utils.ts # resolveDevice, resolveAddressJS, wrapForExecution,
│ # executeTransientScript, truncateResult
├── resources.ts # MCP resources (runtime + docs)
├── docs/
│ ├── index.ts # DocStore — search/scoring over frida-api.json
│ └── frida-api.json # Pre-parsed Frida 17 API documentation
├── injected/
│ ├── helpers.ts # Frida 17-safe JS generators (modules, memory read/write/search)
│ ├── java-helpers.ts # Java introspection, hooking, SSL bypass, file ops JS generators
│ └── hook-templates.ts # Native hook JS generators
└── tools/
├── device.ts # Device enumeration (4 tools)
├── process.ts # Process management (6 tools)
├── session.ts # Session management (5 tools)
├── script-mgmt.ts # Script loading/RPC (4 tools)
├── export.ts # One-shot RPC + capture export (1 tool)
├── memory.ts # Module/memory operations (6 tools)
├── java.ts # Java introspection & hooking (6 tools)
├── native-hooks.ts # Native hooking (2 tools)
├── android.ts # Android pentesting & file ops (5 tools)
└── docs.ts # Doc search (1 tool)Key Patterns
SessionManager — Unified state for all sessions, scripts, and messages. Replaces the Python server's 4 separate global dicts. Message queue is capped at 1000 to prevent unbounded memory growth; cleared/evicted messages are archived to disk as lightweight summaries, and large payload/data fields are offloaded to disk with blob references to keep tool output token-safe.
Injected JS generators — Template functions that produce Frida 17-compliant JavaScript. Rules: var (not const/let), no arrow functions, instance methods on NativePointer (not Memory.readX), Process.getModuleByName (not Module.*).
Promise-based execution — executeTransientScript uses Promise-based message collection instead of time.sleep(). Scripts send an execution_receipt message and are auto-unloaded after.
Output truncation — truncateResult() binary-searches for the max array items that fit within 24KB to stay under MCP's token limit. Applied to enumerate_processes, list_modules, list_exports, list_classes, get_session_messages, and read_session_message_blob.
Usage Examples
Attach and execute code
1. enumerate_processes → find target PID
2. create_interactive_session(pid) → get session_id
3. execute_in_session(session_id, "Process.arch") → "arm64"Load a script and call RPC
1. create_interactive_session(pid) → session_id
2. load_script(session_id, "my_script.js") → detects rpc.exports: ["doStuff"]
3. call_rpc_export(session_id, script_id, "doStuff", [arg1, arg2]) → resultHook a native function
1. create_interactive_session(pid) → session_id
2. hook_function(session_id, "libnative.so+0x1234", log_args=true, num_args=4) → hook_id
3. (trigger the function on device)
4. get_session_messages(session_id) → hook arg/retval logsOne-step RPC + capture export to disk
1. create_interactive_session(pid) → session_id
2. load_script(session_id, "/path/hook.js") → script_id
3. export_capture_bundle(
session_id,
rpc={script_id, method:"getSignings"},
include_messages=true,
clear_mode="returned",
response_detail="path_only"
) → output_path + slim summariesHook a Java method
1. create_interactive_session(pid) → session_id
2. list_classes(session_id, filter="com.example") → find target class
3. list_methods(session_id, "com.example.ApiClient") → find target method
4. android_hook_method(session_id, "com.example.ApiClient", "sendRequest") → hook_id
5. (trigger the method on device)
6. get_session_messages(session_id) → method args/retval logsBypass SSL pinning
1. create_interactive_session(pid) → session_id
2. android_ssl_pinning_disable(session_id) → script_id
3. get_session_messages(session_id) → list of bypassed targetsSearch and patch memory
1. create_interactive_session(pid) → session_id
2. search_memory(session_id, pattern="secret_key", pattern_type="string") → addresses
3. read_memory(session_id, "0x7f1234") → hex dump
4. write_memory(session_id, "0x7f1234", "00 00 00 00") → bytes writtenBrowse files on target device
1. create_interactive_session(pid) → session_id
2. file_ls(session_id, "/data/data/com.example.app") → directory listing
3. file_read(session_id, "/data/data/com.example.app/shared_prefs/config.xml") → file contentSearch Frida 17 docs
1. search_frida_docs("Module.findExportByName") → migration guide ranked first
2. search_frida_docs("Interceptor.attach") → instrumentation section with examples
3. search_frida_docs("Java.perform", limit=3, offset=3) → next page of snippet resultsFrida 17 Notes
This server is built for Frida 17 compatibility. Key differences from older Frida versions:
No
Module.findExportByName()— UseProcess.getModuleByName(name).findExportByName(sym)insteadNo
Memory.readX()static methods — UseNativePointerinstance methods:ptr(addr).readU32()No
enumerateXSync()methods — UseProcess.enumerateModules(),module.enumerateExports()varinstead ofconst/letin injected scripts — Avoids issues with Frida's V8 runtime in some contextsJava bridge moved in Frida 17 — Java-capable tools compile scripts with
frida-java-bridgeand injectglobalThis.Javabefore running user code
The search_frida_docs tool automatically boosts the migration guide when you query deprecated API names.
Operational Skill (Recommended)
For reliable Frida MCP operation (Frida 17), use the companion skills repository: https://github.com/yfe404/frida-mcp-skills.
The frida-mcp-workflow skill enforces a strict workflow: Idea -> Scripting -> Execution -> Notes. It also enforces docs-first usage, file-based scripts over large inline payloads, and script lifecycle hygiene (track/unload scripts to avoid duplicate hooks on the same target).
Development
# Build
npm run build
# Run all tests (unit + integration)
npm test
# Run only unit tests
npm run test:unit
# Run only integration tests
npm run test:integration
# Run device tests (requires USB device with frida-server)
npm run test:device
# Fetch/update Frida API docs
npm run fetch-docsTest Structure
test/
├── unit/ # 137 tests — pure logic, no device needed
│ ├── utils.test.ts
│ ├── injected-helpers.test.ts
│ ├── injected-java.test.ts
│ ├── injected-hooks.test.ts
│ ├── session-manager.test.ts
│ └── doc-store.test.ts
├── integration/ # 12 tests — MCP server via InMemoryTransport + stdio
│ ├── mcp-server.test.ts
│ └── stdio-smoke.test.ts
├── device/ # 5 tests — auto-skip when no USB device
│ └── device-smoke.test.ts
└── fixtures/
└── frida-api-fixture.jsonLicense
MIT
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.
Related MCP Servers
- Alicense-qualityDmaintenanceAn 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.Last updated399MIT
- 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.Last updated55MIT
- AlicenseCqualityDmaintenanceAn MCP server for real-device Android reversing workflows, wrapping AlgorithmAide config writes, AppSwitch/logList sync, LSPosed scope sync, Frida script injection, and runtime log queries into a stable MCP toolset.Last updated2311MIT
- Alicense-qualityDmaintenanceA comprehensive MCP server for Frida dynamic instrumentation, enabling AI agents to manage devices, processes, scripts, memory, and ADB operations.Last updated21MIT
Related MCP Connectors
MCP (Model Context Protocol) server for Appwrite
A TypeScript MCP server for Home Assistant, enabling programmatic management of entities, automati…
Security scanner for MCP servers. Detect vulnerabilities, prompt injection, and tool poisoning.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/yfe404/frida-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server