camoufox-reverse-mcp
This server provides AI coding assistants with a comprehensive toolkit for JavaScript reverse engineering using the Camoufox anti-fingerprint Firefox browser (via Playwright).
Browser Control
Launch/close the Camoufox anti-detection browser with options for headless mode, OS fingerprint emulation (C++ engine-level), proxy, humanized mouse, and GeoIP
Navigate URLs, reload pages, go back in history, click elements, type text, wait for elements
Take screenshots (full page or element), accessibility tree snapshots, get page info (URL, title, viewport, full HTML)
JavaScript Execution & Debugging
Execute arbitrary JavaScript in page context; inspect variables, call functions, enumerate object properties
Set pseudo-breakpoints via JS hooks; inject persistent init scripts that run before page JS on every navigation
Script Analysis
List all scripts loaded on the page (external and inline), fetch full source, search for keywords, save scripts to local files
Hooking & Tracing
Hook functions with custom code (before/after/replace) with overwrite protection; trace calls (args, return values, call stacks)
Inject preset hooks for XHR, Fetch, Crypto APIs, WebSocket, and debugger bypass
Track property accesses on browser objects (navigator, screen, canvas, etc.); freeze prototypes to prevent hook overwriting
Retrieve/filter console logs; remove all hooks and restore original objects
Network Analysis
Start/stop network capture with URL pattern filtering and optional response body capture
List/filter captured requests (URL, method, resource type, status); get full request/response details and JS call stacks that initiated requests
Intercept requests to log, block, modify headers/body, or mock responses
Search response bodies for keywords; paginate large responses; extract values by JSON path
JSVMP Reverse Engineering
Instrument JSVMP-protected scripts to trace interpreter execution, API calls, and sensitive browser property reads — no bytecode analysis required
Extract and decode obfuscated strings (XOR/shifted string tables); compare browser environment fingerprints against Node.js/jsdom for gap analysis
Engine-Level Property Tracing
Trace DOM property access at the C++ engine level (undetectable by JSVMP) to precisely identify what environment properties a VM reads (e.g.,
navigator.*,screen.*,document.cookie)
Cookie & Storage Management
Get, set, and delete cookies; read/write localStorage and sessionStorage
Export/import complete browser state (cookies + storage) to/from JSON files
Fingerprint & Detection Verification
Get detailed browser fingerprint info (userAgent, WebGL, canvas hash, etc.)
Verify anti-detection by navigating to bot detection sites and screenshotting results
Bypass anti-debugging traps (infinite debugger loops, Function constructor checks)
Session Management
Get full session info (browser state, contexts, pages, hooks, capture status); manage request interception patterns
Enables bypassing Cloudflare's anti-bot detection systems to perform web scraping and JavaScript reverse engineering on protected sites.
Utilizes the Firefox-based Camoufox browser to provide engine-level fingerprint spoofing and stealthy automation capabilities.
Provides a comprehensive suite of tools for JavaScript reverse engineering, including script source analysis, function hooking, dynamic debugging, and execution.
Supports blocking WebRTC to prevent IP leaks and enhance anonymity during automated browser operations.
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., "@camoufox-reverse-mcpintercept fetch requests on example.com and analyze the encryption parameters"
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.
camoufox-reverse-mcp
An MCP Server based on an anti-fingerprinting browser, specifically designed for JavaScript reverse engineering.
An MCP (Model Context Protocol) server that allows AI coding assistants (Claude Code, Cursor, Cline, etc.) to perform reverse engineering operations via the Camoufox anti-fingerprinting browser, including: API parameter analysis, static JS file analysis, dynamic breakpoint debugging, function hook tracing, network traffic interception, JSVMP bytecode analysis, and Cookie/storage management.
Why choose Camoufox?
Feature | chrome-devtools-mcp | camoufox-reverse-mcp |
Browser Engine | Chrome (Puppeteer) | Firefox (Camoufox) |
Anti-detection | None | C++ Engine-level fingerprinting |
Debugging | Limited (no breakpoints) | Playwright + JS Hook |
JSVMP Analysis | None | Interpreter instrumentation + Source-level rewriting |
Hook Persistence | Not supported | Context-level persistence, auto-re-injection after navigation |
Core Advantages:
Camoufox modifies fingerprint information at the C++ level, not via JS-layer patching, making it undetectable at the root.
Juggler protocol sandbox isolation makes Playwright completely undetectable by page JS.
BrowserForge generates fingerprints based on real-world traffic statistical distributions, not random combinations.
Works normally on various strong anti-scraping sites like RS, AK, JY, CF, etc.
Hooks use
Object.definePropertyfor anti-overwrite protection, preventing page scripts from restoring original methods.
Related MCP server: JS Reverse MCP
Quick Start
Method 1: Direct Installation via AI Chat (Recommended)
In the chat box of your AI coding tool (Cursor / Claude Code / Codex, etc.), enter:
帮我安装下这个mcp工具:camoufox-reverse-mcp
项目地址:https://github.com/WhiteNightShadow/camoufox-reverse-mcpThe AI will automatically complete the entire process of cloning, installing dependencies, and configuring the MCP Server.
Method 2: Manual Installation
git clone https://github.com/WhiteNightShadow/camoufox-reverse-mcp.git
cd camoufox-reverse-mcp
pip install -e .Client Configuration
{
"mcpServers": {
"camoufox-reverse": {
"command": "python",
"args": ["-m", "camoufox_reverse_mcp"]
}
}
}{
"mcpServers": {
"camoufox-reverse": {
"command": "python",
"args": ["-m", "camoufox_reverse_mcp", "--headless"]
}
}
}{
"mcpServers": {
"camoufox-reverse": {
"command": "python",
"args": [
"-m", "camoufox_reverse_mcp",
"--proxy", "http://127.0.0.1:7890",
"--geoip",
"--humanize"
]
}
}
}Overview of Available Tools (35 total)
Browser Control
Tool | Description |
| Launch the Camoufox anti-fingerprinting browser |
| Close the browser and release resources |
| Navigate to a specified URL (supports pre_inject_hooks, redirect_chain tracking) |
| Refresh the page |
| Take a screenshot (supports full page, specific elements) |
| Get the page accessibility tree (token efficient) |
| Click an element / Type text |
| Wait for an element to appear or URL to match |
| Get current page URL, title, viewport size |
JS Execution & Debugging
Tool | Description |
| Execute arbitrary JS expressions in the page context (multi-strategy JSON parsing) |
Script Analysis
Tool | Description |
| Script management: |
| Search keywords (full search if |
Hook & Tracing
Tool | Description |
| Hook or trace functions: |
| One-click injection of preset hooks (xhr / fetch / crypto / websocket / debugger_bypass / cookie / runtime_probe) |
| Remove all hooks and restore original objects |
| Get page console output |
Network Analysis
Tool | Description |
| Network capture control: |
| List captured requests (supports filtering by URL / domain / method / type / status code) |
| Get full request details ( |
| Get the JS call stack that initiated the request |
| Intercept requests: log / block / modify / mock / stop |
JSVMP Reverse Analysis
Anti-scraping Type → Tool Path Reference Table
Anti-scraping Type
Representative
✅ Recommended Path
❌ Disable
Signature-based (Environment = Signature)
RS 5/6, AK sensor_data
instrumentation(action="install")
pre_inject_hooks,hook_jsvmp_interpreter(mode="proxy")Behavior-based (Parameter signature)
TK JSVMP, JY gt4
hook_jsvmp_interpreter(mode="proxy")—
Pure Obfuscation
Common JS obfuscators
Any combination
—
Tool | Description |
| JSVMP runtime probe ( |
| Source-level instrumentation: |
| Browser environment fingerprint collection, for comparison with Node.js/jsdom |
Cookie & Storage
Tool | Description |
| Cookie management: |
| Get localStorage / sessionStorage |
| Export / Import full browser state |
Verification & Environment
Tool | Description |
| Offline verification of signature functions: pass sample list, character-level comparison, locate first deviation point |
| One-stop self-check: MCP version, dependencies, browser status, camoufox-reverse custom version detection |
| Clean up residuals (hooks / capture / routes), without closing the browser |
Engine-level Property Tracing (New in v1.1.0)
Requires camoufox-reverse custom browser. Returns an error if not installed, does not affect other tools.
Tool | Description |
| C++ engine-level DOM property access tracing (JSVMP undetectable). Supports summary/timeline/sequence/search views. |
| List all local trace files (for post-analysis) |
| Query specified historical trace files, supports filtering by object/keyword |
Usage Scenarios
Scenario 1: Reverse Engineering Login Interface Signature Parameters
1. launch_browser()
2. inject_hook_preset("xhr")
3. inject_hook_preset("crypto")
4. navigate("https://example.com/login")
5. type_text("#username", "test") → click("#login-btn")
6. list_network_requests(method="POST")
7. get_request_initiator(request_id=3) ← 定位签名函数
8. search_code("sign") ← 搜索签名代码
9. hook_function("window.getSign", mode="trace")
10. reload() → get_console_logs() ← 收集追踪数据Scenario 2: General JSVMP Reverse Engineering (RS / AK / Self-developed VMP)
1. launch_browser()
2. network_capture(action="start")
3. navigate("https://target-site.com/")
4. list_network_requests(resource_type="script") ← 找到 VMP 脚本
5. instrumentation(action="install", url_pattern="**/vmp_target*.js", mode="ast")
6. inject_hook_preset("cookie", persistent=True)
7. instrumentation(action="reload") ← 让插桩生效
8. instrumentation(action="log", type_filter="tap_get") ← 看 VMP 读了什么环境
9. instrumentation(action="log", type_filter="tap_method") ← 看 VMP 调了什么 API
10. compare_env() ← 收集环境用于 Node.js 补齐Scenario 3: Verifying Protocol Code
1. launch_browser() → navigate("https://target.com")
2. network_capture(action="start")
3. # 触发目标操作,收集带签名的请求
4. reqs = list_network_requests(url_filter="api/search")
5. # 提取样本
6. verify_signer_offline(
signer_code="(s) => ({'X-Bogus': mySign(s.url)})",
samples=[{"id": "r1", "input": {...}, "expected": {"X-Bogus": "..."}}]
)👉 For complete anti-scraping type identification and workflows, see docs/JSVMP_PLAYBOOK.md
Scenario 4: Engine-level Tracing of JSVMP Environment Fingerprints (New in v1.1.0)
Requires camoufox-reverse custom browser
1. launch_browser(enable_trace=True) ← 启动带 C++ 追踪的浏览器
2. navigate("https://www.douyin.com/video/xxx") ← JSVMP 执行,事件自动记录
3. trace_property_access(duration=0, mode="summary", collect_values=True)
→ 返回 JSVMP 实际读取的 42 个 DOM 属性、访问频次、以及真实值
→ 小值内联返回,大值(Canvas/WebGL/Cookie 等)自动保存到
~/.cache/camoufox-reverse/values/ 目录
# 按时间线查看属性访问节奏
4. trace_property_access(duration=0, mode="timeline", bucket_ms=500)
# 按对象过滤
5. trace_property_access(duration=0, filter_object="webgl")
# 搜索特定属性
6. trace_property_access(duration=0, mode="search", search_query="cookie")Difference from compare_env:
trace_property_access: Traces properties actually read by JSVMP (precise, C++ level, undetectable)compare_env: Collects all environment properties of the browser (full, JS level)When using Path B for environment spoofing, use trace results to decide "which properties to patch" to avoid introducing new leaks by over-patching
Technical Architecture
┌─────────────────────────────────────────────────┐
│ AI 编码助手 (Cursor / Claude) │
│ ↕ MCP (stdio) │
├─────────────────────────────────────────────────┤
│ camoufox-reverse-mcp (35 tools) │
│ ┌──────────┬──────────┬──────────┬──────────┐ │
│ │Navigation│ Script │Debugging │ Hooking │ │
│ │ │ Analysis │ │ │ │
│ ├──────────┼──────────┼──────────┼──────────┤ │
│ │ Network │ JSVMP │ Cookie │ Verify │ │
│ │ Capture │ Analysis │ Storage │ Signer │ │
│ ├──────────┴──────────┴──────────┴──────────┤ │
│ │ ★ PropertyTracer (trace_property_access) │ │
│ │ C++ 引擎层 DOM 属性追踪(JSVMP 不可检测) │ │
│ └───────────────────────────────────────────┘ │
│ ↕ Playwright API │
├─────────────────────────────────────────────────┤
│ Camoufox (反指纹 Firefox, Juggler 协议) │
│ C++ 引擎级指纹伪造 · BrowserForge 真实指纹分布 │
└─────────────────────────────────────────────────┘Changelog
v1.1.0 (2026-04-22) — Engine-level Property Tracing
Added 3 tools,
launch_browseraddedenable_traceparameter.
New Tools
trace_property_access— C++ engine-level DOM property access tracing (JSVMP undetectable), supports summary/timeline/sequence/search viewslist_trace_files— List local trace filesquery_trace_file— Query historical trace files
Changes
launch_browseraddedenable_traceparameter; when enabled, it automatically injectsCAMOU_CONFIGandMOZ_DISABLE_CONTENT_SANDBOXcheck_environmentaddedcamoufox_reversefield to detect custom browser installation status
Dependencies
Requires camoufox-reverse custom browser (optional, not installing it does not affect the other 32 tools)
v1.0.0 (2026-04-18) — Tool Streamlining + Return to Pure JS Reverse Toolset
Major Version: 80 → 32 tools, schema tokens halved. Removed Session archive/assertion system, returned to pure JS reverse tool positioning.
Tool Merging (v0.9.0)
network_capture(action=start/stop/clear/status)← start/stop_network_capturescripts(action=list/get/save)← list_scripts / get_script_source / save_scriptsearch_code(keyword, script_url=None)← search_code / search_code_in_scripthook_function(path, mode=intercept/trace)← hook_function / trace_functioninstrumentation(action=install/log/stop/reload/status)← instrument_jsvmp_source / get_instrumentation_log / stop_instrumentation / reload_with_hooks / get_instrumentation_statuscookies(action=get/set/delete)← get_cookies / set_cookies / delete_cookies
Removed Tools
Session archive system (7): start/stop_reverse_session, list_sessions, get_session_snapshot, attach_domain_readonly, export/import_session
Assertion system (4): add/verify/list/remove_assertion
Cold tools (37): trace_property_access, freeze_prototype, find_dispatch_loops, get_page_content, bypass_debugger_trap, check_detection, get_fingerprint_info, dump_jsvmp_strings, evaluate_js_handle, add_init_script, set_breakpoint_via_hook, get_breakpoint_data, etc.
New
verify_signer_offline— Stateless signature function verification (replaces verify_against_session)
Bug Fixes (v0.8.1)
evaluate_js: Multi-strategy JSON parsing (control character cleaning, double-encoding unpacking)navigate: Cleans network cache by default to prevent cross-navigation request pollutionget_network_request:max_body_sizeparameter controls body truncation (default 5000)launch_browser: Returns residual state diagnosis when already_running
Removed Dependencies: tldextract (used only by Session)
Design Philosophy: MCP is a pure toolset (stateless) and does not perform workflow management. Memory/accumulation of analysis projects belongs to the skill layer and user workspace.
v0.6.0 — Practical Bug Fixes
hook_jsvmp_interpreter(mode="proxy"): Fixedtoo much recursioncaused by Proxy recursionremove_hooks: Truly restores Proxy objectsevaluate_js: BOM / lone surrogate / whitespace auto-cleaninginstrument_jsvmp_source: CSP pre-checknavigate: Graceful degradation on timeout
v0.5.0 — Signature-based Anti-scraping Compatibility
instrument_jsvmp_sourcedefault MCP-side AST rewritinghook_jsvmp_interpreteraddedmode="transparent"Anti-scraping type decision table + JSVMP Playbook
v0.4.0 — General JSVMP Adaptation
Source-level instrumentation, Cookie attribution, runtime probes
hook_jsvmp_interpreter multi-path coverage rewriting
v0.3.0 — Stability Fixes
v0.2.0 — Hook Persistence + JSVMP Analysis
v0.1.0 — Initial Version (44 tools)
Feedback / Communication
If you encounter bugs during use, want new Hook presets, or want to discuss JS reverse engineering ideas, feel free to add me on WeChat:
WeChat ID:
han8888v8888
Please add a note "camoufox-reverse" when adding me so I can accept your request quickly.
License
MIT
Available Tools
35 toolscheck_environmentA
One-stop self-check of MCP environment, dependencies, and browser state.
v1.0.0: session-related checks removed (session mechanism removed). Checks MCP version, critical dependencies (esprima, playwright), browser state (residuals, captures).
Returns: dict with sections: mcp, deps, browser, overall_ok, recommendations.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the tool's read-like behavior (checking, no side effects implied) and details the return value sections (mcp, deps, browser, overall_ok, recommendations). It also notes version changes (session checks removed). However, it does not explicitly state that it is non-destructive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise: two sentences plus a structured list of return sections. It front-loads the purpose and includes relevant version history. Every sentence contributes value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters, no output schema, and no annotations, the description provides sufficient context: what is checked, the return structure, and a version note. It is complete for the agent to understand and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and the schema coverage is 100% (empty). Per guidelines, the baseline is 4. The description adds value by explaining the output structure but cannot add parameter semantics since there are none.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's verb ('check') and resource ('MCP environment, dependencies, and browser state'). It lists specific components checked (MCP version, dependencies like esprima and playwright, browser state) and distinguishes it from sibling tools like 'compare_env' by focusing on a self-check rather than comparison.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for initial diagnostics but provides no explicit guidance on when to use it versus alternatives like 'reset_browser_state' or 'compare_env'. The context is implicit, lacking when-to-use or when-not-to-use instructions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
clickC
Click on a page element.
| Name | Required | Description | Default |
|---|---|---|---|
| selector | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. Description does not disclose any behavioral traits: waits, scrolling, error handling, return value, or side effects. The agent cannot infer if the tool blocks, throws on missing elements, or modifies page state.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, concise but lacking structure. No front-loading of critical info. It is acceptable for a simple tool but could be improved with bullet points or warnings.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is extremely sparse. It does not cover prerequisites (page loaded, element exists), behavioral context (will it scroll to element?), or return values. For a destructive action like click, more completeness is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has a single required parameter 'selector' with no description (0% schema coverage). The tool description does not explain what format the selector expects (CSS, XPath, etc.). No additional meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear verb+resource ('Click on a page element.'). The action is evident, but does not explicitly distinguish from siblings (e.g., type_text, navigate). The description is straightforward but could be more specific (e.g., 'by CSS selector').
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like type_text or evaluate_js. The description lacks context for choosing click over other interaction tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
close_browserA
Close the Camoufox browser and release all resources.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It mentions 'release all resources,' hinting at cleanup, but does not disclose irreversible side effects such as loss of browser state or inability to reuse the browser session.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that is concise and to the point. Every word adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless tool with no output schema, the description adequately explains the core action. However, it could briefly mention the irreversible nature or that the browser must be open.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so no parameter description is needed. Schema coverage is 100% (vacuously). Baseline 4 applies as schema does all the work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action: 'Close the Camoufox browser and release all resources.' It uses a verb-resource structure that distinguishes it from sibling tools like 'launch_browser' or 'navigate'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It does not mention prerequisites (e.g., browser must be open), consequences (e.g., loses unsaved state), or contrast with other tools like 'reset_browser_state'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_envA
Collect browser environment fingerprint data for comparison with Node.js/jsdom.
Args: properties: Optional list of specific properties to check. If omitted, checks navigator, screen, canvas, WebGL, audio, timing.
Returns: dict with categorized environment data and their values.
| Name | Required | Description | Default |
|---|---|---|---|
| properties | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It explains the tool collects fingerprint data and returns categorized environment data, and mentions the optional 'properties' parameter with defaults. It does not contradict any annotations (none present). It adds context beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise with two short paragraphs. The first sentence immediately states the purpose. Every sentence provides value, and there is no superfluous content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has only one optional parameter and no output schema, the description is complete. It explains the argument, default behavior, and return type (dict). Sibling tools are diverse and this description is sufficient for an AI agent to understand when and how to use it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has one optional parameter 'properties' with only type info. The description adds significant meaning: it explains the parameter is optional, lists default property categories (navigator, screen, canvas, WebGL, audio, timing). This compensates for the 0% schema description coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool collects browser environment fingerprint data for comparison with Node.js/jsdom. It uses a specific verb ('Collect') and resource ('browser environment fingerprint data'), and distinguishes itself from siblings like 'check_environment' which might check individual properties.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly mentions the use case: comparison with Node.js/jsdom. It implies when to use the tool but does not provide explicit alternatives or when-not-to-use scenarios. Sibling tools like 'check_environment' could be related, but no exclusionary guidance is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cookiesA
Cookie management (v0.9.0 unified).
Replaces get_cookies / set_cookies / delete_cookies.
Args: action: "get" — return cookies (optionally filtered by domain) "set" — set cookies (requires cookies_list: [{name, value, domain, ...}]) "delete" — delete cookies (filter by name and/or domain; no filter = clear all) domain: Domain filter for "get" and "delete" (e.g. ".example.com"). cookies_list: List of cookie dicts for "set". name: Cookie name filter for "delete".
Returns: For "get": list of cookie dicts. For "set"/"delete": dict with status and count.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| action | Yes | ||
| domain | No | ||
| cookies_list | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses the return types for each action and notes that 'delete' with no filter clears all cookies—a destructive behavior. However, it does not cover potential side effects (e.g., impact on browser state) or error conditions, leaving some gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: a one-line title, a line about replacement, clearly labeled Args section, and a Returns section. Every sentence earns its place, and the most important info (action options) is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 4 parameters and multiple actions, the description covers the primary use cases and return values. The presence of an output schema reduces the need to detail return format. However, it lacks details on error handling, cookie dict format for set, and constraints (e.g., domain format).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains each parameter: 'action' with its three values and effects, 'domain' for filtering, 'cookies_list' for set, and 'name' for delete. This adds significant meaning beyond the schema, though the structure of 'cookies_list' items is only vaguely described as 'cookie dicts'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it is for 'Cookie management' and explicitly lists three actions (get, set, delete) with distinct behaviors. It also notes that it replaces older tools (get_cookies, set_cookies, delete_cookies), establishing a clear scope distinct from sibling browser automation tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use each action via the 'action' parameter and provides context for domain and name filters. It mentions replacing older tools but does not explicitly contrast with alternatives like 'get_storage' or state when not to use this tool. The guidance is clear but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
evaluate_jsA
Execute an arbitrary JavaScript expression in the page context and return the result.
v1.0.1 fix: correctly handles undefined/null/void/Symbol return values without triggering JSON.parse crashes.
Return value is aggressively cleaned (strips BOM, fixes lone surrogates, trims whitespace, auto-parses JSON strings). If direct evaluate fails with serialization error, automatically falls back to evaluate_handle.
Args: expression: JavaScript expression. Must be a single expression, not top-level var/let/const/function declarations (Playwright limitation). Wrap in IIFE if needed: (() => { var x = 1; return x; })() await_promise: If True, awaits Promise results (default True).
Returns: dict with keys: value - cleaned value (parsed JSON if applicable) value_raw - raw string before cleaning (only when cleaning applied) type - "primitive" | "json" | "handle_fallback" | "error" warnings - list of applied cleanups, if any hint - (error only) friendly fix suggestion or None
| Name | Required | Description | Default |
|---|---|---|---|
| expression | Yes | ||
| await_promise | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite no annotations, the description details behavior: automatic fallback to evaluate_handle on serialization error, aggressive cleaning of return values (BOM, lone surrogates, whitespace, JSON auto-parse), and structured return dict with keys. This provides good transparency beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear purpose statement, version note, behavior details, argument list, and return format. It is front-loaded but slightly lengthy; each sentence adds value, though minor redundancy exists (e.g., version note in both description and returns).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (arbitrary JS execution), lack of output schema, and no annotations, the description is remarkably complete. It covers edge cases (fallback, cleaning), return structure, and hints for errors, providing an agent with sufficient context to invoke and interpret results correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description fully explains both parameters: expression must be a single expression (not declarations) with IIFE workaround, and await_promise defaults to true. This adds critical meaning beyond the schema's simple type definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool executes arbitrary JavaScript expressions in the page context, using specific verb+resource. It distinguishes itself from siblings like 'scripts' and 'hook_function' by focusing on arbitrary evaluation, not script management or hooking.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
While it provides constraints (single expression, no declarations, IIFE if needed) and notes on await_promise, it does not offer guidance on when to use this tool over siblings like 'scripts' or 'hook_function'. No explicit when-to-use or alternatives are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_stateA
Export the complete browser state (cookies + storage) to a JSON file.
Args: save_path: Local file path to save the state JSON.
Returns: dict with status and the save path.
| Name | Required | Description | Default |
|---|---|---|---|
| save_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden but only mentions it exports state and returns a dict. It does not disclose whether it is a read-only operation, permissions needed, file overwrite behavior, or side effects, leaving gaps in transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and includes both purpose and parameter explanation, but could be better structured with a separate returns section and less informal formatting.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity of the tool and siblings like import_state, the description is mostly complete. It mentions what is exported and what it returns, but lacks details on behavior like overwriting files or error handling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds meaningful context to the single parameter save_path by indicating it is a local file path for saving state JSON, compensating for the 0% schema description coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Export', the resource 'complete browser state', and specifies it includes cookies and storage. It differentiates well from sibling tools like import_state (import) and reset_browser_state (reset).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for saving browser state but does not explicitly state when to use it versus alternatives like import_state or reset_browser_state, nor does it provide context for when it is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_console_logsA
Get console output collected from the page.
Args: level: Filter by log level - "log", "warn", "error", or "info". keyword: Filter logs containing this keyword in the text. clear: If True, clear the log buffer after retrieval.
Returns: List of dicts with level, text, timestamp, and location.
| Name | Required | Description | Default |
|---|---|---|---|
| clear | No | ||
| level | No | ||
| keyword | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description covers key behaviors: it returns a list of filtered logs and clears the buffer if the clear parameter is True. It could mention that it only reads existing logs without affecting the page, but it's adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise: three sentences for purpose, then list of parameters and return type. No unnecessary words, front-loaded with the action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, parameters, behavioral effect of clear, and return structure. With an output schema present, the return description is sufficient. The tool is straightforward and well-documented.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite schema description coverage being 0%, the description fully documents all three parameters (level, keyword, clear) to clarify their meaning and effect, compensating completely.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool gets console output from the page, with a specific verb and resource, and distinguishes from sibling tools like get_storage or take_snapshot.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs alternatives. The description only explains what the tool does, not context for choosing it over other tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_network_requestA
Get full details of a specific captured network request.
Args: request_id: The ID of the request (from list_network_requests). include_body: Include response body (default False). include_headers: Include request/response headers (default True). max_body_size: Max chars of body when include_body=True. Pass -1 for unlimited.
Returns: dict with request and response details.
| Name | Required | Description | Default |
|---|---|---|---|
| request_id | Yes | ||
| include_body | No | ||
| max_body_size | No | ||
| include_headers | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It states the tool is read-only (captured request details) and describes parameters, but does not specify behavior on invalid request_id, rate limits, or performance implications. Decent coverage but lacks edge-case details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is concise (3 sentences and a param list) and front-loaded with the purpose. Each part adds value, though the returns section could be more detailed. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description mentions return as 'dict with request and response details' but lacks specifics on structure. For 4 params, it covers param semantics well but omits error handling and response format details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% (no descriptions in schema), so description must compensate. It explains request_id source, default values for booleans, and the special value -1 for max_body_size. This adds significant meaning beyond schema titles and types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool 'get full details of a specific captured network request', specifying verb and resource. It distinguishes from sibling 'list_network_requests' (which lists requests) and 'get_request_initiator' (which gets the initiator).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by referencing 'from list_network_requests' but does not explicitly state when to use this tool over alternatives, nor does it provide when-not-to-use guidance. No exclusions or prerequisites are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_page_infoB
Get current page URL, title, and viewport size.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden for behavioral disclosure. It only lists what is returned, but does not state whether the tool requires an active page, has side effects, or is read-only.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that is front-loaded with the purpose. Every word earns its place; no wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no parameters and no output schema, the description is minimally adequate but lacks contextual details such as safety guarantees (read-only), required state (active page), or relation to siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters (100% coverage). According to guidelines, baseline is 3 when schema description coverage is high. The description does not add parameter info, but none is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and the resource 'current page URL, title, and viewport size'. It is specific and distinguishes the tool from siblings like navigate, click, or take_screenshot.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. There is no mention of prerequisites, context, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_request_initiatorA
Get the JS call stack that initiated a network request.
Golden path: see encrypted param -> get_request_initiator -> find signing function. Requires inject_hook_preset("xhr"/"fetch") BEFORE navigating.
KNOWN LIMITATIONS (v0.8.1+):
For requests modified by an interceptor registered BEFORE MCP's hooks (e.g. SDKs loaded via sync ), the initiator will be the interceptor's call, not the original business code. Workaround: use reload_with_hooks().
For fetch on Firefox, Playwright-native initiator is often null. Requires inject_hook_preset('fetch', persistent=True).
Args: request_id: The ID of the request.
Returns: dict with url, initiator_stack, source, diagnostics.
| Name | Required | Description | Default |
|---|---|---|---|
| request_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully discloses behavioral traits: need for hooks, limitations with interceptors and Firefox, and workarounds like reload_with_hooks.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with bold section headers, concise sentences, and front-loaded main purpose. Every section adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity, single parameter, and no output schema, the description covers prerequisites, limitations, return value structure, and workarounds completely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter request_id, with brief description 'The ID of the request'. Schema coverage is 0%, so description should add more context (e.g., source of request_id). Adequate but minimal.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'Get the JS call stack that initiated a network request', which is a specific verb and resource. Distinguishes from sibling tools like get_network_request and list_network_requests.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly describes golden path, prerequisite (inject_hook_preset), and known limitations with workarounds, guiding when to use and when not.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_storageA
Get the contents of localStorage or sessionStorage.
Args: storage_type: "local" for localStorage, "session" for sessionStorage.
Returns: dict with all key-value pairs in the storage.
| Name | Required | Description | Default |
|---|---|---|---|
| storage_type | No | local |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries full burden. It conveys a read operation ('Get') and specifies the return format as a dict of key-value pairs, but omits details like error handling, permissions, or idempotency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise: three sentences with no waste. The purpose is front-loaded, and the parameter and return are clearly separated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple getter with 0 required parameters and no output schema, the description covers the core behavior and return format. Minor gaps (e.g., error states) but acceptable given low complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description explains the single parameter 'storage_type' with its allowed values ('local' for localStorage, 'session' for sessionStorage), adding significant meaning beyond the schema's bare type declaration.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and the resource 'contents of localStorage or sessionStorage', distinguishing it from sibling tools that handle other aspects like page info or console logs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives (e.g., get_page_info for DOM data). The context of siblings is not leveraged to set exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hook_functionA
Hook or trace a function (v0.9.0 unified).
Replaces hook_function + trace_function.
Args: function_path: Full path like "window.encrypt", "XMLHttpRequest.prototype.open", "JSON.stringify". mode: "intercept" — inject custom JS before/after/replace the function. Requires hook_code. (was: hook_function) "trace" — non-invasive trace logging args, return values, and optionally call stacks. (was: trace_function) hook_code: JS code for "intercept" mode. Context vars: - arguments: original args - __this: the 'this' context - __result: return value (only in position="after") position: For "intercept": "before", "after", or "replace". non_overridable: For "intercept": use Object.defineProperty to lock. persistent: If True, survives page navigation. log_args: For "trace": record arguments (default True). log_return: For "trace": record return values (default True). log_stack: For "trace": record call stacks (default False). max_captures: For "trace": max calls to record (default 50).
Returns: dict with status, target, mode.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | intercept | |
| log_args | No | ||
| position | No | before | |
| hook_code | No | ||
| log_stack | No | ||
| log_return | No | ||
| persistent | No | ||
| max_captures | No | ||
| function_path | Yes | ||
| non_overridable | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description handles behavioral disclosure well. It details that intercept mode injects custom JS with context variables, trace mode logs non-invasively, and mentions persistence and non-overridability. It could mention potential resource usage or removal mechanisms, but overall it is transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a one-liner and bulleted arguments. While informative, it is somewhat verbose; for example, the context variable explanations could be condensed. Still, it remains clear and readable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 10 parameters, no output schema, and no annotations, the description is remarkably complete. It explains every parameter, the return value format, and gives usage patterns like examples for function_path. It covers both modes thoroughly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description provides extensive parameter semantics beyond the schema: explains function_path format, mode options, hook_code context variables, position values, and trace-related parameters. This adds significant meaning that the schema lacks.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with 'Hook or trace a function (v0.9.0 unified).' It clearly states the tool's purpose and distinguishes it as a unified replacement for older hook and trace functions. Sibling tools like hook_jsvmp_interpreter and trace_property_access are different, so this description effectively differentiates.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains two modes ('intercept' and 'trace') with their requirements and behavior, e.g., 'Requires hook_code' for intercept. It provides context for when each mode is appropriate. However, it does not explicitly compare with siblings like hook_jsvmp_interpreter or trace_property_access, which would improve guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hook_jsvmp_interpreterA
Install a JSVMP runtime probe.
Multi-path instrumentation for JSVMP interpreters. Wraps Reflect.get/apply, installs Proxies on globals (navigator, screen, etc.), intercepts timing APIs.
LIMITATIONS: "proxy" mode is DETECTABLE by RS/AK-style signature-based anti-bot. For those, use instrumentation(action='install') (source-level rewrite) or mode='transparent' instead.
IMPORTANT — timing for sync-loaded SDKs (e.g. webmssdk): JSVMP interpreters capture native references at startup via closures. If you install hooks AFTER the SDK has loaded, the SDK's closures already hold the original (un-hooked) references — your hooks will never fire. You MUST install hooks BEFORE navigate(): 1. launch_browser() 2. hook_jsvmp_interpreter(mode='transparent', persistent=True) 3. navigate("https://www.douyin.com/...") If already navigated, call instrumentation(action='reload') after installing hooks to force a page reload with hooks active.
Args: script_url: Target script URL substring for stack filtering. persistent: Survive navigation (default True). mode: "proxy" (full coverage, detectable) or "transparent" (safe, lower coverage). track_calls, track_props, track_reflect: Only for mode="proxy". proxy_objects: Objects to proxy (default: navigator, screen, etc.). max_entries: Log buffer cap (default 10000).
Returns: dict with status, mode, coverage summary.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | proxy | |
| persistent | No | ||
| script_url | No | ||
| max_entries | No | ||
| track_calls | No | ||
| track_props | No | ||
| proxy_objects | No | ||
| track_reflect | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It details behavioral traits: detectability of proxy mode, the need to install hooks before navigation, persistence, and the wrapping of Reflect.get/apply and Proxy installation on globals.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with summary, limitations, important notes, and Args section. Slightly lengthy but every sentence adds value. Could be tightened slightly, but overall effective.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 8 required and optional params, no output schema, and no annotations, the description provides complete coverage: explains return value, usage patterns, edge cases, and limitations. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but description thoroughly explains each of the 8 parameters, including default values, constraints (e.g., track params only for proxy mode), and purpose (e.g., script_url for filtering, max_entries for buffer cap).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool installs a JSVMP runtime probe and explains multi-path instrumentation. It is distinctly different from sibling tools like hook_function or inject_hook_preset, which target other intercept mechanisms.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use guidance, including a step-by-step sequence for sync-loaded SDKs. It also warns against using 'proxy' mode for RS/AK-style anti-bot and directs to alternatives like instrumentation or mode='transparent'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
import_stateA
Import browser state from a JSON file by creating a new context.
Args: state_path: Path to the state JSON file (exported by export_state).
Returns: dict with status and the new context name.
| Name | Required | Description | Default |
|---|---|---|---|
| state_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description reveals that a new context is created, but lacks details on side effects (e.g., what happens to existing contexts, whether the import overrides any existing state). No annotations are provided, so the description carries the full burden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is brief and covers the essential information: purpose, argument, and return value. It could be slightly more concise, but it is well-structured with clear sections.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity of the tool (one parameter, no output schema), the description provides adequate information to understand basic usage. However, it lacks details on error handling, expected behavior when the file is invalid, or interaction with the current browser state.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has one parameter with no description, but the description adds context: state_path is a path to a JSON file exported by export_state. This adds meaning beyond the schema type and title.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action: importing browser state from a JSON file by creating a new context. It distinguishes itself from sibling tools like export_state and reset_browser_state.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage after export_state to restore state, but does not provide explicit guidance on when to use this tool versus alternatives like reset_browser_state, nor does it mention any prerequisites or context state requirements.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inject_hook_presetA
Inject a pre-built hook template for common reverse engineering tasks.
Available presets: - "xhr": Hook XMLHttpRequest to log all XHR requests. - "fetch": Hook window.fetch to log all fetch requests. - "crypto": Hook btoa/atob/JSON.stringify to capture encryption I/O. - "websocket": Hook WebSocket to log all WS messages. - "debugger_bypass": Bypass anti-debugging traps. - "cookie": Hook document.cookie writes. - "runtime_probe": Full runtime probe.
Args: preset: One of the above preset names. persistent: If True (default), survives page navigation.
Returns: dict with status and the preset name.
| Name | Required | Description | Default |
|---|---|---|---|
| preset | Yes | ||
| persistent | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It mentions persistence and return format, but does not disclose potential side effects, error handling, or impact on the page.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is concise, well-structured with a clear header, bulleted preset list, and separate sections for args and returns. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, description adequately explains return value. Lacks error details but is sufficient for a simple tool with 2 parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 0% coverage, so description fully explains parameters: preset names and options, and persistent's behavior (survives navigation). Adds significant meaning beyond raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool injects a pre-built hook template for common reverse engineering tasks, listing specific presets. This distinguishes it from siblings like hook_function, which injects custom hooks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage through the listed presets for common tasks, but lacks explicit guidance on when to use this tool versus alternatives like hook_function or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
instrumentationA
JSVMP source-level instrumentation (v0.9.0 unified).
Replaces instrument_jsvmp_source / get_instrumentation_log / stop_instrumentation / reload_with_hooks.
Args: action: "install" — register route + AST/regex rewrite on matched scripts. Requires url_pattern. (was: instrument_jsvmp_source) "log" — fetch accumulated tap events from instrumented code. (was: get_instrumentation_log) "stop" — unregister instrumentation route. (was: stop_instrumentation) "reload" — reload page so persistent hooks fire before page JS. (was: reload_with_hooks) "status" — show active instrumentations and stats. (was: get_instrumentation_status) url_pattern: For "install"/"stop" — glob pattern matching VMP script URLs. mode: For "install" — "ast" (default) or "regex". tag: For "install"/"log" — group identifier. rewrite_member_access: For "install" — tap obj[key] reads. rewrite_calls: For "install" — tap fn(args) calls. max_rewrites: For "install" — hard cap on rewrites per file. fallback_on_error: For "install" — auto-fallback to regex if AST fails. ignore_csp: For "install" — skip CSP pre-flight check. clear_log: For "reload" — clear JSVMP logs before reload. wait_until: For "reload" — "load" / "domcontentloaded" / "networkidle". tag_filter: For "log" — filter by tag. type_filter: For "log" — "tap_get", "tap_call", "tap_method", "tap_call_err". key_filter: For "log" — substring match on property/method name. limit: For "log" — max entries to return. clear: For "log" — clear log after retrieval. filter_property_names: For "install" — only rewrite access to these property names (e.g. ['userAgent', 'platform', 'webdriver']). Dramatically reduces overhead for large files like webmssdk. filter_object_names: For "install" — only rewrite when base object matches (e.g. ['navigator', 'screen', 'document']). max_file_size: For "install" — files larger than this (bytes) trigger on_oversized behavior. Default 200KB. on_oversized: For "install" — "selective" (require filters), "skip", or "force" (full rewrite anyway). Default "selective".
Returns: dict with action-specific results.
IMPORTANT — timing for sync-loaded scripts (e.g. webmssdk): Route interception only catches requests made AFTER the route is registered. For scripts loaded via during page load, you MUST call instrumentation(action='install') BEFORE navigate(). Pattern: 1. launch_browser() 2. instrumentation(action='install', url_pattern='**/webmssdk*') 3. navigate("https://www.douyin.com/...") If called after navigate, use instrumentation(action='reload') to re-trigger page load with routes active.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | vmp | |
| mode | No | ast | |
| clear | No | ||
| limit | No | ||
| action | Yes | ||
| clear_log | No | ||
| ignore_csp | No | ||
| key_filter | No | ||
| tag_filter | No | ||
| wait_until | No | load | |
| type_filter | No | ||
| url_pattern | No | ||
| max_rewrites | No | ||
| on_oversized | No | selective | |
| max_file_size | No | ||
| rewrite_calls | No | ||
| fallback_on_error | No | ||
| filter_object_names | No | ||
| filter_property_names | No | ||
| rewrite_member_access | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It details each action's behavior (registering routes, rewriting scripts, fetching logs) and important constraints (timing, tags). It does not explicitly mention side effects or destructive nature, but the context (instrumentation, rewrites) implies mutation. Slightly more explicit behavioral statements could push it to 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but well-organized with clear sections (Args, Returns, IMPORTANT) and uses bullet points for actions and parameters. Every sentence serves a purpose, including migration guidance (was: old_name). It front-loads the core purpose and parameter table, then adds critical timing notes. No redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 20 parameters, no output schema, and no annotations, the description is remarkably complete. It covers all actions, describes every parameter in detail, provides default values, explains when to use filters, and even includes a full workflow example. The only omission is a detailed return value structure, but 'dict with action-specific results' is acceptable given the complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description provides exhaustive parameter explanations, including default values, valid options (e.g., for action, mode, wait_until), and specific use cases (e.g., filter_property_names for reducing overhead). This fully compensates for the lack of schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool is for JSVMP source-level instrumentation and unifies multiple actions (install, log, stop, reload, status). It distinguishes from sibling tools by focusing on a specific instrumentation domain, with a clear verb (instrumentation) and resource (JSVMP scripts).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use guidance, including a timing pattern requiring installation before navigate, with a step-by-step example. Explains each action's purpose and when to use alternatives (e.g., using reload after navigate). This is best-in-class for usage clarity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
intercept_requestB
Intercept network requests matching a pattern.
Args: url_pattern: URL glob pattern (e.g. "**/api/login*"). action: "log", "block", "modify", "mock", or "stop" (unroute). modify_headers: Headers to add/override (action="modify"). modify_body: Request body replacement (action="modify"). mock_response: Dict with "status", "headers", "body" (action="mock").
| Name | Required | Description | Default |
|---|---|---|---|
| action | No | log | |
| modify_body | No | ||
| url_pattern | Yes | ||
| mock_response | No | ||
| modify_headers | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It explains each action (log, block, modify, mock, stop) and associated parameters for modify and mock. However, it omits details like whether interception persists across navigation, how to remove interceptions, or any side effects on the browser state.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph that efficiently covers all parameters and their roles. It uses a list-like format with lines starting with parameter names, which aids readability. However, it could be slightly more structured (e.g., bullet points) for easier scanning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and no annotations, the description lacks important context: it does not describe the return value, how to see intercepted requests, how to remove interceptions, or the lifecycle of the interception. The tool deals with mutable state, but these aspects are not addressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage, so the description must compensate. It does so effectively, explaining url_pattern with a glob example, listing all five action values, and clarifying the conditional use of modify_headers, modify_body, and mock_response. This fully covers the purpose and usage of each parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Intercept network requests matching a pattern.' It uses a specific verb and resource, and the actions (log, block, modify, etc.) further clarify its function. However, it does not explicitly differentiate this tool from siblings like network_capture or list_network_requests, which also deal with network requests.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description lists the possible actions but provides no guidance on when to use this tool versus alternative network tools such as network_capture or list_network_requests. There is no mention of prerequisites, exclusions, or context for choosing interception over other methods.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
launch_browserA
Launch the Camoufox anti-detection browser, or attach to a running one.
Args:
headless: Run in headless mode (default False).
os_type: OS fingerprint - "auto", "windows", "macos", or "linux".
locale: Browser locale (e.g. "zh-CN"). "auto" detects system locale.
proxy: Proxy server URL (e.g. "http://127.0.0.1:7890").
humanize: Enable humanized mouse movement.
geoip: Auto-infer geolocation from proxy IP.
block_images: Block image loading.
block_webrtc: Block WebRTC to prevent IP leaks.
enable_trace: Enable engine-level property access tracing.
Requires camoufox-reverse custom browser build.
When enabled, use trace_property_access() to capture DOM access.
ws_endpoint: Attach to an already-running Camoufox server instead of
launching a new browser. Start the server with
python -m camoufox server, copy its "Websocket endpoint:
ws://127.0.0.1:/" line, and pass that full URL here.
When set, all other launch args (os_type/locale/proxy/...) are
ignored — fingerprint config is owned by the running server. Start the
server with an os fingerprint matching the host for font-metric parity
(attach mode cannot inject the host/os font-fallback shim that launch
mode does). close_browser() will only disconnect; the server keeps running.
Returns: dict with status, config, and page list.
| Name | Required | Description | Default |
|---|---|---|---|
| geoip | No | ||
| proxy | No | ||
| locale | No | auto | |
| os_type | No | auto | |
| headless | No | ||
| humanize | No | ||
| ws_endpoint | No | ||
| block_images | No | ||
| block_webrtc | No | ||
| enable_trace | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description fully bears responsibility. It discloses behavioral traits: attach mode cannot inject host/os font-fallback shim, close_browser() only disconnects in attach mode, and that enable_trace requires a custom browser build. It does not detail side effects like resource consumption or authentication needs, but covers key behaviors.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with 'Args:' and 'Returns:' sections, and each parameter is documented concisely. It is somewhat lengthy but every sentence adds value. Minor redundancy (e.g., repeating 'attach' mode behavior) could be tightened, but overall effective.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (10 optional parameters, no output schema), the description is complete: it covers both modes, parameter dependencies, return type (dict with status/config/page list), and mentions related tools (close_browser, trace_property_access). An agent can confidently invoke this tool based solely on the description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description must explain all 10 parameters. It does so thoroughly: headless, os_type, locale, proxy, humanize, geoip, block_images, block_webrtc, enable_trace, and ws_endpoint each have clear descriptions of purpose, defaults, and special notes (e.g., geoip auto-infers from proxy, ws_endpoint overrides others). This fully compensates for the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Launch the Camoufox anti-detection browser, or attach to a running one.' It uses a specific verb ('launch'/'attach') and resource ('Camoufox browser'), distinguishing it from sibling tools like navigate or take_screenshot.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear guidance on when to use launch vs attach mode via the ws_endpoint parameter, noting that attach ignores other launch args. It mentions server startup command and fingerprint considerations. However, it lacks explicit exclusions or alternatives to using this tool versus other browsers/setup methods.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_network_requestsA
List captured network requests with optional filters.
Args: url_filter: Substring filter for request URLs. url_contains_domain: Convenience domain filter (e.g. 'nmpa.gov.cn'). method: HTTP method filter (e.g. "GET", "POST"). resource_type: Resource type filter (e.g. "xhr", "fetch", "script", "document"). status_code: HTTP status code filter.
Returns: List of request summaries with id, url, method, status, type, ms, size.
| Name | Required | Description | Default |
|---|---|---|---|
| method | No | ||
| url_filter | No | ||
| status_code | No | ||
| resource_type | No | ||
| url_contains_domain | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description clearly indicates a read-only listing operation and specifies return fields. It could mention if listing is limited or if filters combine with AND/OR, but the basic behavior is transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single introductory sentence followed by a bullet-style parameter list and a return line. Every line adds value, and the structure is clean and scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema (implied by 'has output schema: true'), the description adequately covers return fields. It lacks details on filter combination logic and the scope of 'captured network requests', but overall is sufficient for a straightforward listing tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 0% description coverage, but the description adds meaningful details: 'substring filter', 'convenience domain filter', and examples for method/resource_type. This goes beyond parameter names and provides concrete guidance beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List captured network requests with optional filters', specifying the verb (list), resource (captured network requests), and qualifier (optional filters). It distinguishes from siblings like get_network_request (single request) and network_capture (capture control).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool vs alternatives like get_network_request or network_capture. Usage is implied by the name and sibling tools, but the description lacks any direct comparison or when-not-to-use instructions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_trace_filesC
List all trace files on disk (for post-hoc analysis).
Returns: dict with traces_dir, total file count, and file details.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Only mentions return format but no safety traits (e.g., read-only, requires permissions) or side effects. Lacks basic behavioral disclosure for a file operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise: two sentences, front-loaded with purpose in first sentence. No redundant words, every part adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Missing explanation of the 'limit' parameter and context about file location, ordering, or performance. Without output schema, the return format info is helpful but incomplete for a list operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not mention the 'limit' parameter at all. Fails to explain its purpose or effect, leaving the agent to infer from the default value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the verb 'list' and resource 'trace files on disk', with context 'for post-hoc analysis'. Distinguishes from sibling 'query_trace_file' by emphasizing listing all files.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs alternatives like query_trace_file. Implied usage from 'post-hoc analysis' but no explicit recommendations or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
network_captureA
Unified network capture control (v0.9.0).
Replaces start_network_capture / stop_network_capture.
Args: action: "start" — begin capturing network events "stop" — stop capturing (buffer retained) "clear" — clear the capture buffer "status" — return current capture state url_pattern: Glob pattern for "start" (default "**/*" captures all). capture_body: For "start" only; capture response bodies (more memory).
Returns: dict with action result + current status snapshot.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | ||
| url_pattern | No | **/* | |
| capture_body | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It describes each action's effect (e.g., 'begin capturing', 'stop capturing (buffer retained)', 'clear the capture buffer', 'return current capture state') and notes that url_pattern defaults to capturing all and capture_body is for start only. It also specifies the return format. It lacks details on memory/performance impacts but is otherwise transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a brief sentence, then Args and Returns sections. It is efficient and front-loaded. The version number 'v0.9.0' adds minor clutter but does not significantly harm conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations, no output schema, and 0% schema coverage, the description adequately covers the tool's purpose, parameters, actions, and return value. It is complete for controlling network capture, though it does not mention integration with sibling tools for reading captured data.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It fully explains each parameter: action values (start, stop, clear, status) with their meanings, url_pattern as a glob pattern for start, and capture_body as a boolean for start only. This adds significant meaning beyond the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states it is 'Unified network capture control' and lists specific actions (start, stop, clear, status), making the tool's purpose clear. It also distinguishes itself from sibling tools like start_network_capture and stop_network_capture by noting it replaces them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states it replaces start_network_capture and stop_network_capture, giving context on when to use this tool over separate ones. However, it does not explicitly mention when not to use it or suggest alternative tools for reading captured data, leaving some workflow ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_trace_fileB
Query a specific historical trace file (post-hoc analysis).
Args: file_path: Path to the .jsonl trace file. mode: Same as trace_property_access (summary/timeline/sequence/search). filter_object: Filter by object name. search_query: Filter by search string. limit: Max events for sequence mode. bucket_ms: Bucket size for timeline mode.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | summary | |
| limit | No | ||
| bucket_ms | No | ||
| file_path | Yes | ||
| search_query | No | ||
| filter_object | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears full responsibility. It implies read-only operation with 'post-hoc analysis' but does not explicitly state that it never modifies state, lacks disclosure on performance or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear purpose statement followed by a parameter list. It could be more concise by reducing redundancy, but the front-loaded purpose aids quick understanding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 6 parameters, no output schema, and no annotations, the description lacks information about return values or behavior of each mode. It references 'Same as trace_property_access' but does not explain what each mode returns for a trace file.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description adds significant value by explaining each parameter's purpose (e.g., 'Filter by object name', 'Bucketed timeline mode'). It compensates for the schema's lack of descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool queries a specific historical trace file for post-hoc analysis. It distinguishes from siblings like trace_property_access (which accesses current trace properties) and list_trace_files (listing files).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives. The description mentions 'Same as trace_property_access' but does not provide usage context or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reloadB
Reload the current page, preserving any init scripts.
| Name | Required | Description | Default |
|---|---|---|---|
| wait_until | No | load |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description mentions preserving init scripts, which provides some behavioral context. However, with no annotations, it lacks disclosure of other effects (e.g., state reset, cookie clearing). The info is adequate but incomplete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence is concise and front-loaded. However, it omits essential parameter guidance, which could be added briefly without bloating.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple reload action with one optional parameter and no output schema, the description is nearly complete but misses parameter explanation. It adequately covers the primary function.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has one parameter (wait_until) with default but no description. The description does not mention the parameter at all, failing to compensate for 0% schema coverage. The agent cannot infer valid values or meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the action (reload) and resource (current page), and adds distinguishing detail about preserving init scripts. This differentiates it from siblings like navigate or close_browser.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives (e.g., navigate, close_browser). No mention of prerequisites or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_hooksA
Remove installed hooks and restore original objects in-place.
Args: keep_persistent: If True, keep persistent init_scripts registered.
Returns: dict with status, restored_objects, cleared counts.
| Name | Required | Description | Default |
|---|---|---|---|
| keep_persistent | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses that the tool modifies state in-place and returns a dict with status, restored_objects, and cleared counts. It does not mention failure conditions or prerequisites, but the information provided is sufficient for a simple tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two sentences for the main action, followed by a bullet list of arguments and returns. Every word adds value with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple 1-parameter schema and no output schema or annotations, the description covers the tool's purpose, the parameter's effect, and the return structure completely. No additional information is needed for correct usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter 'keep_persistent' is described in detail: 'If True, keep persistent init_scripts registered.' This adds meaning beyond the schema's title 'Keep Persistent' and default value, explaining the effect of the parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'remove' and the resource 'installed hooks', with the specific action of restoring original objects in-place. This distinctly differentiates it from sibling tools like 'hook_function' which installs hooks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage after hooks have been installed, as it says 'remove installed hooks' and 'restore original objects'. However, it does not explicitly state when to use vs alternatives or provide when-not scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reset_browser_stateA
Reset MCP-side browser residual state without closing the browser.
Args: clear_persistent_hooks: Remove all persistent init scripts. clear_network_capture: Clear network request buffer and stop captures. clear_active_routes: Clear instrumentation routes. clear_cookies: ALSO clear browser cookies (destructive; default False). clear_storage: ALSO clear localStorage/sessionStorage (default False).
| Name | Required | Description | Default |
|---|---|---|---|
| clear_cookies | No | ||
| clear_storage | No | ||
| clear_active_routes | No | ||
| clear_network_capture | No | ||
| clear_persistent_hooks | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It does mention which parameters are destructive (clear_cookies, clear_storage) and that others remove state like hooks and network capture. However, it does not describe side effects like losing ongoing captures, reversibility, or potential impact on the browser session. Partial transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with a clear, concise opening sentence explaining the tool's core function. The parameter details are presented as a bulleted list, which is easy to parse. It is not overly verbose, though the bullet list could be slightly more compact.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the tool's purpose and all parameters. However, it lacks information about return values or success/failure output (no output schema exists). It also does not mention error conditions, prerequisites, or whether the tool can be safely called multiple times. For a reset tool, these details would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description fully compensates by explaining each parameter's purpose: removing persistent hooks, clearing network capture, clearing routes, and also clarifying that clear_cookies and clear_storage are destructive and default to False. This adds significant meaning beyond the bare boolean names in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Reset' and the resource 'MCP-side browser residual state', and distinguishes from 'without closing the browser', which differentiates it from siblings like close_browser. It also lists specific state components (hooks, network capture, routes, cookies, storage) for clarity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when you want to clear state but keep the browser open, contrasting with close_browser. However, it does not provide explicit guidance on when to use this tool versus alternatives like remove_hooks or network_capture for granular operations. No when-not-to-use or prerequisite information is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scriptsA
Script inspection (v0.9.0 unified).
Replaces list_scripts / get_script_source / save_script.
Args: action: "list" — list all loaded scripts (src, type, inline preview) "get" — get full source of one script (requires url; use "inline:" for inline scripts) "save" — save script source to local file (requires url + save_path) url: Script URL or "inline:" (required for "get" and "save"). save_path: Local file path (required for "save").
Returns: For "list": list of script info dicts. For "get": dict with source string. For "save": dict with status, path, size.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | ||
| action | Yes | ||
| save_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description explains actions and outputs, but omits potential side effects such as whether 'save' overwrites files or if there are any destructive behaviors.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with Args and Returns sections, but the opening line could be more concise. Overall efficient and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity and presence of an output schema, the description covers all actions and parameters. However, it could mention error handling or default behavior for completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description fully compensates for the 0% schema coverage by explaining each action's parameter requirements, including the 'inline:<index>' format for URL.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it is for script inspection with three actions: list, get, save. It explicitly replaces three older tools and distinguishes itself from sibling browser automation tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides clear context for each action and parameter requirements, but does not explicitly state when not to use this tool or mention alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_codeA
Search keyword in loaded scripts (v0.9.0 unified).
Replaces search_code (all scripts) + search_code_in_script (single script).
Args: keyword: The keyword to search for (case-sensitive substring match). script_url: If None, search across ALL loaded scripts. If given, search within that one script only (supports "inline:" for inline scripts). Single-script mode auto-detects minified files and uses character-based context. context_chars: Context window in char mode (default 200 = +/-200 chars). Used when searching single minified scripts. context_lines: Context window in line mode (default 3). max_results: Maximum matches to return (default 200).
Returns: dict with matches, total_matches, mode ("line" | "char"), etc.
| Name | Required | Description | Default |
|---|---|---|---|
| keyword | Yes | ||
| script_url | No | ||
| max_results | No | ||
| context_chars | No | ||
| context_lines | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses behavioral traits: case-sensitive substring matching, dual modes (line/char) based on minification detection, and return structure. It transparently explains all relevant behaviors.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear first sentence and an Args section. It is slightly verbose due to detailed explanations, but every sentence adds value. Could be slightly more concise, but front-loading is effective.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, the description covers return format (dict with matches, total_matches, mode). All 5 parameters are fully explained, and the behavior is comprehensively described for a search tool. No gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must carry full parameter meaning. It does so thoroughly: keyword (case-sensitive substring), script_url (None vs specific, inline support), context_chars and context_lines with defaults and mode relevance, max_results with default. No parameter is left ambiguous.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches for a keyword in loaded scripts, and explicitly mentions it replaces two older tools, making its purpose unambiguous and distinct from sibling tools which are all browser automation or scripting actions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use script_url=None (all scripts) versus a specific script_url (single script), and details auto-detection of minified files for mode selection. It also references the two replaced tools, providing clear context for usage without needing sibling comparison.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
take_screenshotC
Take a screenshot of the current page or a specific element.
Args: full_page: Capture the entire scrollable page. selector: CSS selector of a specific element to capture.
| Name | Required | Description | Default |
|---|---|---|---|
| selector | No | ||
| full_page | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, description bears full burden of behavioral disclosure. It fails to mention error behavior (e.g., invalid selector, page not loaded), output format (e.g., base64, file path), or effects on browser state. Only parameter effects are described minimally.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is concise with purpose first, then parameter list. No unnecessary words, but could be slightly more structured (e.g., bullet points) for clarity. Still effective.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and no annotations, the description lacks critical context such as return value format (e.g., image data, file path), error handling, and how it differs from sibling 'take_snapshot'. Incomplete for an AI agent to reliably invoke.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so description must compensate. It explains 'full_page' captures entire scrollable page and 'selector' targets a specific element, adding meaning beyond the schema's type and title. However, it does not clarify behavior when both are specified or format requirements for selector.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool takes a screenshot of the current page or a specific element, covering basic purpose. However, it does not differentiate from sibling 'take_snapshot' which may have similar functionality, leaving ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like 'take_snapshot'. No mention of prerequisites, scenarios where it should not be used, or when each parameter is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
take_snapshotB
Get the accessibility tree of the current page (token-efficient).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description mentions 'token-efficient' but does not disclose whether the tool is read-only, has side effects, or what the output contains. Significant gaps remain.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, front-loaded with the core purpose. The 'token-efficient' note adds value but is extra; still, no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite zero parameters, the description fails to explain what the accessibility tree contains or how to interpret the result, and no output schema compensates. Incomplete for safe agent use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, so the description adds no parameter information, which is acceptable. Schema coverage is trivially 100%.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves the accessibility tree, which is a specific resource. However, it does not differentiate from siblings like 'take_screenshot' nor explain the scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives such as 'take_screenshot' or 'get_page_info'. The usage context is implied but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trace_property_accessA
Engine-level DOM property access tracing (JSVMP-undetectable).
Traces which DOM properties (navigator, screen, window, canvas, webgl, etc.) are accessed by page JavaScript including JSVMP bytecode interpreters. Operates at the C++ SpiderMonkey engine level — completely invisible to JS.
Requires camoufox-reverse custom browser launched with enable_trace=True. Falls back to compare_env when using official Camoufox.
Args: duration: Trace duration in seconds (default 10). Set to 0 to read existing trace data from browser startup (useful when you want to capture navigate() events). mode: Aggregation view type: - "summary" (default): Property access frequency ranking. Best for deciding which properties to patch in env emulation. - "timeline": Time-bucketed view showing when properties are first accessed. - "sequence": Raw event sequence with timestamps. - "search": Same as sequence but filtered by search_query. filter_object: Only include events from this object (e.g. "navigator"). search_query: Only include events matching this string in property/value. limit: Max events for sequence/search mode (default 1000). bucket_ms: Bucket size for timeline mode (default 500ms). collect_values: If True, after trace completes, use evaluate_js to read real values of all traced properties from the browser. Large values (Canvas dataURL, WebGL params etc.) are saved to files under ~/.cache/camoufox-reverse/values/ and returned as file paths.
Returns: summary mode: {mode, duration_s, total_events, unique_properties, by_property, by_object} If collect_values=True, adds "values" dict: {property_path: value_or_filepath} timeline mode: {mode, duration_s, bucket_ms, buckets} sequence mode: {mode, total_events, returned, truncated, events}
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | summary | |
| limit | No | ||
| duration | No | ||
| bucket_ms | No | ||
| search_query | No | ||
| filter_object | No | ||
| collect_values | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Clearly explains engine-level operation, undetectability, and collect_values behavior. Could mention performance impact but overall transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with title, body, Args, and Returns sections. Every sentence is informative with no redundancy. Front-loaded with the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 7 parameters, no output schema, and no annotations, the description is remarkably complete. Covers all modes, return structures, edge cases, and interaction with other tools (evaluate_js).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but description thoroughly explains each parameter with examples and special cases (e.g., duration=0 for existing trace, bucket_ms for timeline). Adds significant meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it traces DOM property access at the engine level, invisible to JS, and distinguishes itself from sibling tools like compare_env and evaluate_js by noting fallback behavior.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly mentions prerequisite (custom browser with enable_trace=True) and fallback to compare_env. Provides context for when to use different modes but no explicit when-not-to-use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
type_textC
Type text into an input field with realistic keystroke delays.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | ||
| delay | No | ||
| selector | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden for behavioral disclosure. It mentions 'realistic keystroke delays' but omits details like whether it simulates focus/blur events, whether it overwrites or appends text, or whether it works with different input types.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that efficiently conveys the core action. However, it could be expanded to include key parameter details without becoming verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and no annotations, the description is incomplete. It does not mention return values, error conditions (e.g., element not found), or behavior details (e.g., does it clear the field? does it send keyboard events?).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 0% description coverage, so description should illuminate parameters. It only implicitly mentions 'delay' via 'realistic keystroke delays'. It does not explain that 'selector' is a CSS selector or XPath, or that 'text' is the string to type.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Type text into an input field with realistic keystroke delays.' It uses a specific verb (type) and resource (input field), effectively distinguishing it from siblings like click, navigate, or evaluate_js.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives (e.g., evaluate_js to directly set value). There is no mention of prerequisites, when not to use, or comparison to other typing methods.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_signer_offlineA
Offline verify a signing function against user-provided samples.
Typical workflow:
Capture real signed requests via network_capture + list_network_requests
Extract samples into a list
Write candidate signing code
Call this tool -> get pass_rate + first_divergence
Iterate
Args: signer_code: JS evaluating to a function: (sample) => {param: computed_value}. Runs in current page context. samples: List of sample dicts, each with: - id: user-defined identifier - input: dict passed to signer function - expected: dict of {param_name: expected_value_str} compare_params: Which params to compare. If None, compare all keys in each sample's expected.
Returns: dict with total_samples, passed, failed, pass_rate, first_divergence, details.
| Name | Required | Description | Default |
|---|---|---|---|
| samples | Yes | ||
| signer_code | Yes | ||
| compare_params | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes execution context (runs signer_code in current page context), comparison logic (pass_rate, first_divergence), and iterative workflow. With no annotations, this is good transparency; could mention if it modifies browser state but likely doesn't.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with numbered workflow and argument list. Not overly verbose, but a couple of sentences could be merged. Efficient overall.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers all necessary aspects for an offline verification tool: workflow, parameter expectations, return values (total_samples, passed, etc.). No output schema, but return dict explained. Complete for the tool's purpose.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 0% description coverage, but the description fully explains each parameter: signer_code (JS function), samples (list with id, input, expected), compare_params (optional list of keys). Adds structure and examples beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it 'offline verify a signing function against user-provided samples.' The verb 'verify' and resource 'signing function' are specific, and the offline context distinguishes it from real-time debugging tools like hook_function or intercept_request among siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides a typical workflow (capture requests, extract samples, write code, call this tool, iterate) which implies when to use it. Missing explicit when-not-to-use or alternatives, but the workflow gives strong contextual guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wait_forB
Wait for an element to appear or a network request matching a URL pattern.
| Name | Required | Description | Default |
|---|---|---|---|
| timeout | No | ||
| selector | No | ||
| url_pattern | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so description bears full burden. It fails to disclose timeout behavior (e.g., error on timeout), blocking nature, or return values. Only states what is waited for, not how it behaves.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, no fluff, front-loaded with purpose. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations, output schema, or schema descriptions, the description is too minimal. It lacks return value, error handling, prerequisites (e.g., browser open), and details on behavior differences between element and network wait.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 0% description coverage. Description adds meaning by linking selector to element and url_pattern to network request, but does not explain timeout default/units or clarify that parameters are alternatives. Incomplete beyond parameter names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool waits for an element to appear or a network request matching a URL pattern. It uses specific verb 'wait' and resources, distinguishing it from siblings like click or navigate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage (waiting for condition before proceeding) but lacks explicit guidance on when to use versus alternatives. No exclusions or when-not-to-use are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
16 tool updates
v1.1.1- Changed
compare_env4 fields changed- removed
Input schema / properties / properties / anyOfRemoved value: -[ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - removed
Input schema / properties / properties / defaultRemoved value: -null - added
Input schema / properties / properties / itemsAdded value: +{ + "type": "string" +} - added
Input schema / properties / properties / typeAdded value: +"array"
- Changed
cookies10 fields changed- removed
Input schema / properties / cookies_list / anyOfRemoved value: -[ - { - "items": { - "additionalProperties": true, - "type": "object" - }, - "type": "array" - }, - { - "type": "null" - } -] - removed
Input schema / properties / cookies_list / defaultRemoved value: -null - added
Input schema / properties / cookies_list / itemsAdded value: +{ + "additionalProperties": true, + "type": "object" +} - added
Input schema / properties / cookies_list / typeAdded value: +"array" - removed
Input schema / properties / domain / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / domain / defaultRemoved value: -null - added
Input schema / properties / domain / typeAdded value: +"string" - removed
Input schema / properties / name / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / name / defaultRemoved value: -null - added
Input schema / properties / name / typeAdded value: +"string"
- Changed
get_console_logs6 fields changed- removed
Input schema / properties / keyword / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / keyword / defaultRemoved value: -null - added
Input schema / properties / keyword / typeAdded value: +"string" - removed
Input schema / properties / level / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / level / defaultRemoved value: -null - added
Input schema / properties / level / typeAdded value: +"string"
- Changed
hook_jsvmp_interpreter4 fields changed- removed
Input schema / properties / proxy_objects / anyOfRemoved value: -[ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - removed
Input schema / properties / proxy_objects / defaultRemoved value: -null - added
Input schema / properties / proxy_objects / itemsAdded value: +{ + "type": "string" +} - added
Input schema / properties / proxy_objects / typeAdded value: +"array"
- Changed
instrumentation17 fields changed- removed
Input schema / properties / filter_object_names / anyOfRemoved value: -[ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - removed
Input schema / properties / filter_object_names / defaultRemoved value: -null - added
Input schema / properties / filter_object_names / itemsAdded value: +{ + "type": "string" +} - added
Input schema / properties / filter_object_names / typeAdded value: +"array" - removed
Input schema / properties / filter_property_names / anyOfRemoved value: -[ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - removed
Input schema / properties / filter_property_names / defaultRemoved value: -null - added
Input schema / properties / filter_property_names / itemsAdded value: +{ + "type": "string" +} - added
Input schema / properties / filter_property_names / typeAdded value: +"array" - removed
Input schema / properties / key_filter / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / key_filter / defaultRemoved value: -null - added
Input schema / properties / key_filter / typeAdded value: +"string" - removed
Input schema / properties / tag_filter / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / tag_filter / defaultRemoved value: -null - added
Input schema / properties / tag_filter / typeAdded value: +"string" - removed
Input schema / properties / type_filter / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / type_filter / defaultRemoved value: -null - added
Input schema / properties / type_filter / typeAdded value: +"string"
- Changed
intercept_request11 fields changed- added
Input schema / properties / mock_response / additionalPropertiesAdded value: +true - removed
Input schema / properties / mock_response / anyOfRemoved value: -[ - { - "additionalProperties": true, - "type": "object" - }, - { - "type": "null" - } -] - removed
Input schema / properties / mock_response / defaultRemoved value: -null - added
Input schema / properties / mock_response / typeAdded value: +"object" - removed
Input schema / properties / modify_body / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / modify_body / defaultRemoved value: -null - added
Input schema / properties / modify_body / typeAdded value: +"string" - added
Input schema / properties / modify_headers / additionalPropertiesAdded value: +true - removed
Input schema / properties / modify_headers / anyOfRemoved value: -[ - { - "additionalProperties": true, - "type": "object" - }, - { - "type": "null" - } -] - removed
Input schema / properties / modify_headers / defaultRemoved value: -null - added
Input schema / properties / modify_headers / typeAdded value: +"object"
- Changed
launch_browser4 fields changed- removed
Input schema / properties / proxy / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / proxy / defaultRemoved value: -null - added
Input schema / properties / proxy / typeAdded value: +"string" - added
Input schema / properties / ws_endpointAdded value: +{ + "title": "Ws Endpoint", + "type": "string" +}
- Changed
list_network_requests15 fields changed- removed
Input schema / properties / method / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / method / defaultRemoved value: -null - added
Input schema / properties / method / typeAdded value: +"string" - removed
Input schema / properties / resource_type / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / resource_type / defaultRemoved value: -null - added
Input schema / properties / resource_type / typeAdded value: +"string" - removed
Input schema / properties / status_code / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - removed
Input schema / properties / status_code / defaultRemoved value: -null - added
Input schema / properties / status_code / typeAdded value: +"integer" - removed
Input schema / properties / url_contains_domain / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / url_contains_domain / defaultRemoved value: -null - added
Input schema / properties / url_contains_domain / typeAdded value: +"string" - removed
Input schema / properties / url_filter / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / url_filter / defaultRemoved value: -null - added
Input schema / properties / url_filter / typeAdded value: +"string"
- Changed
navigate4 fields changed- removed
Input schema / properties / pre_inject_hooks / anyOfRemoved value: -[ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - removed
Input schema / properties / pre_inject_hooks / defaultRemoved value: -null - added
Input schema / properties / pre_inject_hooks / itemsAdded value: +{ + "type": "string" +} - added
Input schema / properties / pre_inject_hooks / typeAdded value: +"array"
- Changed
query_trace_file6 fields changed- removed
Input schema / properties / filter_object / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / filter_object / defaultRemoved value: -null - added
Input schema / properties / filter_object / typeAdded value: +"string" - removed
Input schema / properties / search_query / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / search_query / defaultRemoved value: -null - added
Input schema / properties / search_query / typeAdded value: +"string"
- Changed
scripts6 fields changed- removed
Input schema / properties / save_path / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / save_path / defaultRemoved value: -null - added
Input schema / properties / save_path / typeAdded value: +"string" - removed
Input schema / properties / url / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / url / defaultRemoved value: -null - added
Input schema / properties / url / typeAdded value: +"string"
- Changed
search_code3 fields changed- removed
Input schema / properties / script_url / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / script_url / defaultRemoved value: -null - added
Input schema / properties / script_url / typeAdded value: +"string"
- Changed
take_screenshot3 fields changed- removed
Input schema / properties / selector / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / selector / defaultRemoved value: -null - added
Input schema / properties / selector / typeAdded value: +"string"
- Changed
trace_property_access6 fields changed- removed
Input schema / properties / filter_object / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / filter_object / defaultRemoved value: -null - added
Input schema / properties / filter_object / typeAdded value: +"string" - removed
Input schema / properties / search_query / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / search_query / defaultRemoved value: -null - added
Input schema / properties / search_query / typeAdded value: +"string"
- Changed
verify_signer_offline4 fields changed- removed
Input schema / properties / compare_params / anyOfRemoved value: -[ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - removed
Input schema / properties / compare_params / defaultRemoved value: -null - added
Input schema / properties / compare_params / itemsAdded value: +{ + "type": "string" +} - added
Input schema / properties / compare_params / typeAdded value: +"array"
- Changed
wait_for6 fields changed- removed
Input schema / properties / selector / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / selector / defaultRemoved value: -null - added
Input schema / properties / selector / typeAdded value: +"string" - removed
Input schema / properties / url_pattern / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / url_pattern / defaultRemoved value: -null - added
Input schema / properties / url_pattern / typeAdded value: +"string"
48 tool updates
v1.0.0- Removed
add_init_script - Removed
bypass_debugger_trap - Removed
check_detection - Added
check_environment - Added
cookies - Removed
delete_cookies - Removed
dump_jsvmp_strings - Removed
evaluate_js_handle - Removed
freeze_prototype - Removed
get_breakpoint_data - Removed
get_cookies - Removed
get_fingerprint_info - Removed
get_jsvmp_log - Changed
get_network_request2 fields changed- changed
Input schema / properties / include_body / defaultPrevious value: -trueNew value: +false - added
Input schema / properties / max_body_sizeAdded value: +{ + "default": 5000, + "title": "Max Body Size", + "type": "integer" +}
- Removed
get_page_content - Removed
get_page_html - Removed
get_property_access_log - Removed
get_response_body_page - Removed
get_script_source - Removed
get_session_info - Removed
get_trace_data - Removed
go_back - Changed
hook_function8 fields changed- added
Input schema / properties / hook_code / defaultAdded value: +"" - added
Input schema / properties / log_argsAdded value: +{ + "default": true, + "title": "Log Args", + "type": "boolean" +} - added
Input schema / properties / log_returnAdded value: +{ + "default": true, + "title": "Log Return", + "type": "boolean" +} - added
Input schema / properties / log_stackAdded value: +{ + "default": false, + "title": "Log Stack", + "type": "boolean" +} - added
Input schema / properties / max_capturesAdded value: +{ + "default": 50, + "title": "Max Captures", + "type": "integer" +} - added
Input schema / properties / modeAdded value: +{ + "default": "intercept", + "title": "Mode", + "type": "string" +} - added
Input schema / properties / persistentAdded value: +{ + "default": false, + "title": "Persistent", + "type": "boolean" +} - changed
Input schema / requiredPrevious value: -[ - "function_path", - "hook_code" -]New value: +[ + "function_path" +]
- Changed
hook_jsvmp_interpreter8 fields changed- added
Input schema / properties / max_entriesAdded value: +{ + "default": 10000, + "title": "Max Entries", + "type": "integer" +} - added
Input schema / properties / modeAdded value: +{ + "default": "proxy", + "title": "Mode", + "type": "string" +} - added
Input schema / properties / proxy_objectsAdded value: +{ + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Proxy Objects" +} - added
Input schema / properties / script_url / defaultAdded value: +"" - added
Input schema / properties / track_callsAdded value: +{ + "default": true, + "title": "Track Calls", + "type": "boolean" +} - added
Input schema / properties / track_propsAdded value: +{ + "default": true, + "title": "Track Props", + "type": "boolean" +} - added
Input schema / properties / track_reflectAdded value: +{ + "default": true, + "title": "Track Reflect", + "type": "boolean" +} - removed
Input schema / requiredRemoved value: -[ - "script_url" -]
- Added
instrumentation - Changed
launch_browser1 field changed- added
Input schema / properties / enable_traceAdded value: +{ + "default": false, + "title": "Enable Trace", + "type": "boolean" +}
- Changed
list_network_requests1 field changed- added
Input schema / properties / url_contains_domainAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Url Contains Domain" +}
- Removed
list_scripts - Added
list_trace_files - Changed
navigate3 fields changed- added
Input schema / properties / clear_network_captureAdded value: +{ + "default": true, + "title": "Clear Network Capture", + "type": "boolean" +} - added
Input schema / properties / collect_response_chainAdded value: +{ + "default": true, + "title": "Collect Response Chain", + "type": "boolean" +} - added
Input schema / properties / pre_inject_hooksAdded value: +{ + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Pre Inject Hooks" +}
- Added
network_capture - Added
query_trace_file - Added
reset_browser_state - Removed
save_script - Added
scripts - Changed
search_code4 fields changed- added
Input schema / properties / context_charsAdded value: +{ + "default": 200, + "title": "Context Chars", + "type": "integer" +} - added
Input schema / properties / context_linesAdded value: +{ + "default": 3, + "title": "Context Lines", + "type": "integer" +} - changed
Input schema / properties / max_results / defaultPrevious value: -50New value: +200 - added
Input schema / properties / script_urlAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Script Url" +}
- Removed
search_code_in_script - Removed
search_json_path - Removed
search_response_body - Removed
set_breakpoint_via_hook - Removed
set_cookies - Removed
set_storage - Removed
start_network_capture - Removed
stop_intercept - Removed
stop_network_capture - Removed
trace_function - Changed
trace_property_access11 fields changed- added
Input schema / properties / bucket_msAdded value: +{ + "default": 500, + "title": "Bucket Ms", + "type": "integer" +} - added
Input schema / properties / collect_valuesAdded value: +{ + "default": false, + "title": "Collect Values", + "type": "boolean" +} - added
Input schema / properties / durationAdded value: +{ + "default": 10, + "title": "Duration", + "type": "integer" +} - added
Input schema / properties / filter_objectAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Filter Object" +} - added
Input schema / properties / limitAdded value: +{ + "default": 1000, + "title": "Limit", + "type": "integer" +} - removed
Input schema / properties / max_entriesRemoved value: -{ - "default": 2000, - "title": "Max Entries", - "type": "integer" -} - added
Input schema / properties / modeAdded value: +{ + "default": "summary", + "title": "Mode", + "type": "string" +} - removed
Input schema / properties / persistentRemoved value: -{ - "default": false, - "title": "Persistent", - "type": "boolean" -} - added
Input schema / properties / search_queryAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Search Query" +} - removed
Input schema / properties / targetsRemoved value: -{ - "items": { - "type": "string" - }, - "title": "Targets", - "type": "array" -} - removed
Input schema / requiredRemoved value: -[ - "targets" -]
- Added
verify_signer_offline
57 tool updates
v0.3.0- First observed
add_init_script - First observed
bypass_debugger_trap - First observed
check_detection - First observed
click - First observed
close_browser - First observed
compare_env - First observed
delete_cookies - First observed
dump_jsvmp_strings - First observed
evaluate_js - First observed
evaluate_js_handle - First observed
export_state - First observed
freeze_prototype - First observed
get_breakpoint_data - First observed
get_console_logs - First observed
get_cookies - First observed
get_fingerprint_info - First observed
get_jsvmp_log - First observed
get_network_request - First observed
get_page_content - First observed
get_page_html - First observed
get_page_info - First observed
get_property_access_log - First observed
get_request_initiator - First observed
get_response_body_page - First observed
get_script_source - First observed
get_session_info - First observed
get_storage - First observed
get_trace_data - First observed
go_back - First observed
hook_function - First observed
hook_jsvmp_interpreter - First observed
import_state - First observed
inject_hook_preset - First observed
intercept_request - First observed
launch_browser - First observed
list_network_requests - First observed
list_scripts - First observed
navigate - First observed
reload - First observed
remove_hooks - First observed
save_script - First observed
search_code - First observed
search_code_in_script - First observed
search_json_path - First observed
search_response_body - First observed
set_breakpoint_via_hook - First observed
set_cookies - First observed
set_storage - First observed
start_network_capture - First observed
stop_intercept - First observed
stop_network_capture - First observed
take_screenshot - First observed
take_snapshot - First observed
trace_function - First observed
trace_property_access - First observed
type_text - First observed
wait_for
TDQS
Each tool targets a distinct aspect of browser automation and reverse engineering. Overlapping concepts like hooking and tracing are clearly separated by different mechanisms (function hooks, presets, source instrumentation, engine-level tracing) with explicit descriptions.
Most tools follow a consistent verb_noun pattern in snake_case. A few unified tools like 'cookies' and 'scripts' use nouns, but their descriptions clarify they encapsulate multiple actions. This minor deviation is acceptable.
35 tools is above the typical 3-15 range, but each tool has a clear purpose and many replace older separate tools. The count is justified by the complexity of the reverse engineering domain and does not feel bloated.
The tool surface covers the full lifecycle of reverse engineering: browser launch, navigation, network capture/interception, hooking, JSVMP instrumentation, engine-level tracing, cookie/storage management, script inspection, state management, and offline verification. No obvious gaps for the stated purpose.
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 Connectors
Live browser debugging for AI assistants — DOM, console, network via MCP.
MCP server for understanding Javascript internals from ECMAScript specification.
A paid remote MCP for AI agent browser approval MCP, built to return verdicts, receipts, usage logs,
MCP server to assist with JxBrowser development.
Related MCP Servers
- AlicenseBqualityDmaintenanceAn MCP server for anti-detection browser automation that uses Camoufox to bypass bot detection and spoof digital fingerprints. It enables AI agents to perform human-like web interactions, including realistic cursor movements, humanized click delays, and automatic cookie popup dismissal.36697MIT
- AlicenseCqualityBmaintenanceAn MCP server for JavaScript reverse engineering that enables AI to perform browser debugging, script analysis, and automated hook injection. It streamlines complex workflows like deobfuscation, network tracing, and risk assessment through direct browser integration.3527995Apache 2.0
- AlicenseNot gradedqualityDmaintenanceA Chrome DevTools Protocol-based MCP server that enables AI coding assistants to control browsers for JavaScript debugging, reverse engineering, web scraping, and API debugging.1,2911Apache 2.0
- AlicenseNot gradedqualityDmaintenanceA powerful MCP server for browser debugging and reverse engineering, providing AI coding assistants with comprehensive browser automation, JavaScript debugging, and network analysis capabilities.3110Apache 2.0
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/WhiteNightShadow/camoufox-reverse-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server