Skip to main content
Glama
WhiteNightShadow

camoufox-reverse-mcp

camoufox-reverse-mcp

中文 | English

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.defineProperty for anti-overwrite protection, preventing page scripts from restoring original methods.


Related MCP server: JS Reverse MCP

Quick Start

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-mcp

The 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_browser

Launch the Camoufox anti-fingerprinting browser

close_browser

Close the browser and release resources

navigate

Navigate to a specified URL (supports pre_inject_hooks, redirect_chain tracking)

reload

Refresh the page

take_screenshot

Take a screenshot (supports full page, specific elements)

take_snapshot

Get the page accessibility tree (token efficient)

click / type_text

Click an element / Type text

wait_for

Wait for an element to appear or URL to match

get_page_info

Get current page URL, title, viewport size

JS Execution & Debugging

Tool

Description

evaluate_js

Execute arbitrary JS expressions in the page context (multi-strategy JSON parsing)

Script Analysis

Tool

Description

scripts(action)

Script management: list / get source / save to local

search_code

Search keywords (full search if script_url=None, single-script search if URL specified; auto-detects minified files using character-level context)

Hook & Tracing

Tool

Description

hook_function

Hook or trace functions: mode="intercept" inject code / mode="trace" non-intrusive tracing

inject_hook_preset

One-click injection of preset hooks (xhr / fetch / crypto / websocket / debugger_bypass / cookie / runtime_probe)

remove_hooks

Remove all hooks and restore original objects

get_console_logs

Get page console output

Network Analysis

Tool

Description

network_capture(action)

Network capture control: start / stop / clear / status

list_network_requests

List captured requests (supports filtering by URL / domain / method / type / status code)

get_network_request

Get full request details (max_body_size controls body truncation)

get_request_initiator

Get the JS call stack that initiated the request

intercept_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

hook_jsvmp_interpreter

JSVMP runtime probe (mode="proxy" full coverage / mode="transparent" signature safety)

instrumentation(action)

Source-level instrumentation: install register rewrite / log get logs / stop stop / reload reload / status check status

compare_env

Browser environment fingerprint collection, for comparison with Node.js/jsdom

Tool

Description

cookies(action)

Cookie management: get / set / delete

get_storage

Get localStorage / sessionStorage

export_state / import_state

Export / Import full browser state

Verification & Environment

Tool

Description

verify_signer_offline

Offline verification of signature functions: pass sample list, character-level comparison, locate first deviation point

check_environment

One-stop self-check: MCP version, dependencies, browser status, camoufox-reverse custom version detection

reset_browser_state

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

trace_property_access

C++ engine-level DOM property access tracing (JSVMP undetectable). Supports summary/timeline/sequence/search views. duration=0 reads all events since startup, duration>0 opens a new trace window. collect_values=True automatically reads real values of all properties from the browser (large values saved to files)

list_trace_files

List all local trace files (for post-analysis)

query_trace_file

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_browser added enable_trace parameter.

New Tools

  • trace_property_access — C++ engine-level DOM property access tracing (JSVMP undetectable), supports summary/timeline/sequence/search views

  • list_trace_files — List local trace files

  • query_trace_file — Query historical trace files

Changes

  • launch_browser added enable_trace parameter; when enabled, it automatically injects CAMOU_CONFIG and MOZ_DISABLE_CONTENT_SANDBOX

  • check_environment added camoufox_reverse field 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_capture

  • scripts(action=list/get/save) ← list_scripts / get_script_source / save_script

  • search_code(keyword, script_url=None) ← search_code / search_code_in_script

  • hook_function(path, mode=intercept/trace) ← hook_function / trace_function

  • instrumentation(action=install/log/stop/reload/status) ← instrument_jsvmp_source / get_instrumentation_log / stop_instrumentation / reload_with_hooks / get_instrumentation_status

  • cookies(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 pollution

  • get_network_request: max_body_size parameter 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"): Fixed too much recursion caused by Proxy recursion

  • remove_hooks: Truly restores Proxy objects

  • evaluate_js: BOM / lone surrogate / whitespace auto-cleaning

  • instrument_jsvmp_source: CSP pre-check

  • navigate: Graceful degradation on timeout

v0.5.0 — Signature-based Anti-scraping Compatibility

  • instrument_jsvmp_source default MCP-side AST rewriting

  • hook_jsvmp_interpreter added mode="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 tools
check_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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
selectorYes

TDQS

C2.2/5.0
Behavior1/5

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.

Conciseness3/5

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.

Completeness1/5

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.

Parameters1/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
propertiesNo

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
actionYes
domainNo
cookies_listNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
expressionYes
await_promiseNo

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
save_pathYes

TDQS

A3.9/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
clearNo
levelNo
keywordNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
request_idYes
include_bodyNo
max_body_sizeNo
include_headersNo

TDQS

A3.9/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.3/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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+):

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

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

ParametersJSON Schema
NameRequiredDescriptionDefault
request_idYes

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
storage_typeNolocal

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNointercept
log_argsNo
positionNobefore
hook_codeNo
log_stackNo
log_returnNo
persistentNo
max_capturesNo
function_pathYes
non_overridableNo

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoproxy
persistentNo
script_urlNo
max_entriesNo
track_callsNo
track_propsNo
proxy_objectsNo
track_reflectNo

TDQS

A4.9/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
state_pathYes

TDQS

A3.6/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
presetYes
persistentNo

TDQS

A4.3/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagNovmp
modeNoast
clearNo
limitNo
actionYes
clear_logNo
ignore_cspNo
key_filterNo
tag_filterNo
wait_untilNoload
type_filterNo
url_patternNo
max_rewritesNo
on_oversizedNoselective
max_file_sizeNo
rewrite_callsNo
fallback_on_errorNo
filter_object_namesNo
filter_property_namesNo
rewrite_member_accessNo

TDQS

A4.8/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
actionNolog
modify_bodyNo
url_patternYes
mock_responseNo
modify_headersNo

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters5/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
geoipNo
proxyNo
localeNoauto
os_typeNoauto
headlessNo
humanizeNo
ws_endpointNo
block_imagesNo
block_webrtcNo
enable_traceNo

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
methodNo
url_filterNo
status_codeNo
resource_typeNo
url_contains_domainNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYes
url_patternNo**/*
capture_bodyNo

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNosummary
limitNo
bucket_msNo
file_pathYes
search_queryNo
filter_objectNo

TDQS

B3.3/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
wait_untilNoload

TDQS

B3.3/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
keep_persistentNo

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
clear_cookiesNo
clear_storageNo
clear_active_routesNo
clear_network_captureNo
clear_persistent_hooksNo

TDQS

A3.9/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNo
actionYes
save_pathNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
keywordYes
script_urlNo
max_resultsNo
context_charsNo
context_linesNo

TDQS

A4.9/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
selectorNo
full_pageNo

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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}

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNosummary
limitNo
durationNo
bucket_msNo
search_queryNo
filter_objectNo
collect_valuesNo

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYes
delayNo
selectorYes

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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:

  1. Capture real signed requests via network_capture + list_network_requests

  2. Extract samples into a list

  3. Write candidate signing code

  4. Call this tool -> get pass_rate + first_divergence

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

ParametersJSON Schema
NameRequiredDescriptionDefault
samplesYes
signer_codeYes
compare_paramsNo

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
timeoutNo
selectorNo
url_patternNo

TDQS

B3.3/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

  1. 16 tool updatesv1.1.1
    • Changedcompare_env4 fields changed
      • removedInput schema / properties / properties / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / properties / default
        Removed value: -null
      • addedInput schema / properties / properties / items
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / properties / type
        Added value: +"array"
    • Changedcookies10 fields changed
      • removedInput schema / properties / cookies_list / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "additionalProperties": true,
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / cookies_list / default
        Removed value: -null
      • addedInput schema / properties / cookies_list / items
        Added value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
      • addedInput schema / properties / cookies_list / type
        Added value: +"array"
      • removedInput schema / properties / domain / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / domain / default
        Removed value: -null
      • addedInput schema / properties / domain / type
        Added value: +"string"
      • removedInput schema / properties / name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / name / default
        Removed value: -null
      • addedInput schema / properties / name / type
        Added value: +"string"
    • Changedget_console_logs6 fields changed
      • removedInput schema / properties / keyword / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / keyword / default
        Removed value: -null
      • addedInput schema / properties / keyword / type
        Added value: +"string"
      • removedInput schema / properties / level / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / level / default
        Removed value: -null
      • addedInput schema / properties / level / type
        Added value: +"string"
    • Changedhook_jsvmp_interpreter4 fields changed
      • removedInput schema / properties / proxy_objects / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / proxy_objects / default
        Removed value: -null
      • addedInput schema / properties / proxy_objects / items
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / proxy_objects / type
        Added value: +"array"
    • Changedinstrumentation17 fields changed
      • removedInput schema / properties / filter_object_names / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / filter_object_names / default
        Removed value: -null
      • addedInput schema / properties / filter_object_names / items
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / filter_object_names / type
        Added value: +"array"
      • removedInput schema / properties / filter_property_names / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / filter_property_names / default
        Removed value: -null
      • addedInput schema / properties / filter_property_names / items
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / filter_property_names / type
        Added value: +"array"
      • removedInput schema / properties / key_filter / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / key_filter / default
        Removed value: -null
      • addedInput schema / properties / key_filter / type
        Added value: +"string"
      • removedInput schema / properties / tag_filter / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / tag_filter / default
        Removed value: -null
      • addedInput schema / properties / tag_filter / type
        Added value: +"string"
      • removedInput schema / properties / type_filter / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / type_filter / default
        Removed value: -null
      • addedInput schema / properties / type_filter / type
        Added value: +"string"
    • Changedintercept_request11 fields changed
      • addedInput schema / properties / mock_response / additionalProperties
        Added value: +true
      • removedInput schema / properties / mock_response / anyOf
        Removed value: -[
        -  {
        -    "additionalProperties": true,
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / mock_response / default
        Removed value: -null
      • addedInput schema / properties / mock_response / type
        Added value: +"object"
      • removedInput schema / properties / modify_body / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / modify_body / default
        Removed value: -null
      • addedInput schema / properties / modify_body / type
        Added value: +"string"
      • addedInput schema / properties / modify_headers / additionalProperties
        Added value: +true
      • removedInput schema / properties / modify_headers / anyOf
        Removed value: -[
        -  {
        -    "additionalProperties": true,
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / modify_headers / default
        Removed value: -null
      • addedInput schema / properties / modify_headers / type
        Added value: +"object"
    • Changedlaunch_browser4 fields changed
      • removedInput schema / properties / proxy / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / proxy / default
        Removed value: -null
      • addedInput schema / properties / proxy / type
        Added value: +"string"
      • addedInput schema / properties / ws_endpoint
        Added value: +{
        +  "title": "Ws Endpoint",
        +  "type": "string"
        +}
    • Changedlist_network_requests15 fields changed
      • removedInput schema / properties / method / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / method / default
        Removed value: -null
      • addedInput schema / properties / method / type
        Added value: +"string"
      • removedInput schema / properties / resource_type / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / resource_type / default
        Removed value: -null
      • addedInput schema / properties / resource_type / type
        Added value: +"string"
      • removedInput schema / properties / status_code / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / status_code / default
        Removed value: -null
      • addedInput schema / properties / status_code / type
        Added value: +"integer"
      • removedInput schema / properties / url_contains_domain / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / url_contains_domain / default
        Removed value: -null
      • addedInput schema / properties / url_contains_domain / type
        Added value: +"string"
      • removedInput schema / properties / url_filter / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / url_filter / default
        Removed value: -null
      • addedInput schema / properties / url_filter / type
        Added value: +"string"
    • Changednavigate4 fields changed
      • removedInput schema / properties / pre_inject_hooks / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / pre_inject_hooks / default
        Removed value: -null
      • addedInput schema / properties / pre_inject_hooks / items
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / pre_inject_hooks / type
        Added value: +"array"
    • Changedquery_trace_file6 fields changed
      • removedInput schema / properties / filter_object / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / filter_object / default
        Removed value: -null
      • addedInput schema / properties / filter_object / type
        Added value: +"string"
      • removedInput schema / properties / search_query / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / search_query / default
        Removed value: -null
      • addedInput schema / properties / search_query / type
        Added value: +"string"
    • Changedscripts6 fields changed
      • removedInput schema / properties / save_path / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / save_path / default
        Removed value: -null
      • addedInput schema / properties / save_path / type
        Added value: +"string"
      • removedInput schema / properties / url / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / url / default
        Removed value: -null
      • addedInput schema / properties / url / type
        Added value: +"string"
    • Changedsearch_code3 fields changed
      • removedInput schema / properties / script_url / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / script_url / default
        Removed value: -null
      • addedInput schema / properties / script_url / type
        Added value: +"string"
    • Changedtake_screenshot3 fields changed
      • removedInput schema / properties / selector / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / selector / default
        Removed value: -null
      • addedInput schema / properties / selector / type
        Added value: +"string"
    • Changedtrace_property_access6 fields changed
      • removedInput schema / properties / filter_object / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / filter_object / default
        Removed value: -null
      • addedInput schema / properties / filter_object / type
        Added value: +"string"
      • removedInput schema / properties / search_query / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / search_query / default
        Removed value: -null
      • addedInput schema / properties / search_query / type
        Added value: +"string"
    • Changedverify_signer_offline4 fields changed
      • removedInput schema / properties / compare_params / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / compare_params / default
        Removed value: -null
      • addedInput schema / properties / compare_params / items
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / compare_params / type
        Added value: +"array"
    • Changedwait_for6 fields changed
      • removedInput schema / properties / selector / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / selector / default
        Removed value: -null
      • addedInput schema / properties / selector / type
        Added value: +"string"
      • removedInput schema / properties / url_pattern / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / url_pattern / default
        Removed value: -null
      • addedInput schema / properties / url_pattern / type
        Added value: +"string"
  2. 48 tool updatesv1.0.0
    • Removedadd_init_script
    • Removedbypass_debugger_trap
    • Removedcheck_detection
    • Addedcheck_environment
    • Addedcookies
    • Removeddelete_cookies
    • Removeddump_jsvmp_strings
    • Removedevaluate_js_handle
    • Removedfreeze_prototype
    • Removedget_breakpoint_data
    • Removedget_cookies
    • Removedget_fingerprint_info
    • Removedget_jsvmp_log
    • Changedget_network_request2 fields changed
      • changedInput schema / properties / include_body / default
        Previous value: -trueNew value: +false
      • addedInput schema / properties / max_body_size
        Added value: +{
        +  "default": 5000,
        +  "title": "Max Body Size",
        +  "type": "integer"
        +}
    • Removedget_page_content
    • Removedget_page_html
    • Removedget_property_access_log
    • Removedget_response_body_page
    • Removedget_script_source
    • Removedget_session_info
    • Removedget_trace_data
    • Removedgo_back
    • Changedhook_function8 fields changed
      • addedInput schema / properties / hook_code / default
        Added value: +""
      • addedInput schema / properties / log_args
        Added value: +{
        +  "default": true,
        +  "title": "Log Args",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / log_return
        Added value: +{
        +  "default": true,
        +  "title": "Log Return",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / log_stack
        Added value: +{
        +  "default": false,
        +  "title": "Log Stack",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / max_captures
        Added value: +{
        +  "default": 50,
        +  "title": "Max Captures",
        +  "type": "integer"
        +}
      • addedInput schema / properties / mode
        Added value: +{
        +  "default": "intercept",
        +  "title": "Mode",
        +  "type": "string"
        +}
      • addedInput schema / properties / persistent
        Added value: +{
        +  "default": false,
        +  "title": "Persistent",
        +  "type": "boolean"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "function_path",
        -  "hook_code"
        -]New value: +[
        +  "function_path"
        +]
    • Changedhook_jsvmp_interpreter8 fields changed
      • addedInput schema / properties / max_entries
        Added value: +{
        +  "default": 10000,
        +  "title": "Max Entries",
        +  "type": "integer"
        +}
      • addedInput schema / properties / mode
        Added value: +{
        +  "default": "proxy",
        +  "title": "Mode",
        +  "type": "string"
        +}
      • addedInput schema / properties / proxy_objects
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Proxy Objects"
        +}
      • addedInput schema / properties / script_url / default
        Added value: +""
      • addedInput schema / properties / track_calls
        Added value: +{
        +  "default": true,
        +  "title": "Track Calls",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / track_props
        Added value: +{
        +  "default": true,
        +  "title": "Track Props",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / track_reflect
        Added value: +{
        +  "default": true,
        +  "title": "Track Reflect",
        +  "type": "boolean"
        +}
      • removedInput schema / required
        Removed value: -[
        -  "script_url"
        -]
    • Addedinstrumentation
    • Changedlaunch_browser1 field changed
      • addedInput schema / properties / enable_trace
        Added value: +{
        +  "default": false,
        +  "title": "Enable Trace",
        +  "type": "boolean"
        +}
    • Changedlist_network_requests1 field changed
      • addedInput schema / properties / url_contains_domain
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Url Contains Domain"
        +}
    • Removedlist_scripts
    • Addedlist_trace_files
    • Changednavigate3 fields changed
      • addedInput schema / properties / clear_network_capture
        Added value: +{
        +  "default": true,
        +  "title": "Clear Network Capture",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / collect_response_chain
        Added value: +{
        +  "default": true,
        +  "title": "Collect Response Chain",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / pre_inject_hooks
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Pre Inject Hooks"
        +}
    • Addednetwork_capture
    • Addedquery_trace_file
    • Addedreset_browser_state
    • Removedsave_script
    • Addedscripts
    • Changedsearch_code4 fields changed
      • addedInput schema / properties / context_chars
        Added value: +{
        +  "default": 200,
        +  "title": "Context Chars",
        +  "type": "integer"
        +}
      • addedInput schema / properties / context_lines
        Added value: +{
        +  "default": 3,
        +  "title": "Context Lines",
        +  "type": "integer"
        +}
      • changedInput schema / properties / max_results / default
        Previous value: -50New value: +200
      • addedInput schema / properties / script_url
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Script Url"
        +}
    • Removedsearch_code_in_script
    • Removedsearch_json_path
    • Removedsearch_response_body
    • Removedset_breakpoint_via_hook
    • Removedset_cookies
    • Removedset_storage
    • Removedstart_network_capture
    • Removedstop_intercept
    • Removedstop_network_capture
    • Removedtrace_function
    • Changedtrace_property_access11 fields changed
      • addedInput schema / properties / bucket_ms
        Added value: +{
        +  "default": 500,
        +  "title": "Bucket Ms",
        +  "type": "integer"
        +}
      • addedInput schema / properties / collect_values
        Added value: +{
        +  "default": false,
        +  "title": "Collect Values",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / duration
        Added value: +{
        +  "default": 10,
        +  "title": "Duration",
        +  "type": "integer"
        +}
      • addedInput schema / properties / filter_object
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Filter Object"
        +}
      • addedInput schema / properties / limit
        Added value: +{
        +  "default": 1000,
        +  "title": "Limit",
        +  "type": "integer"
        +}
      • removedInput schema / properties / max_entries
        Removed value: -{
        -  "default": 2000,
        -  "title": "Max Entries",
        -  "type": "integer"
        -}
      • addedInput schema / properties / mode
        Added value: +{
        +  "default": "summary",
        +  "title": "Mode",
        +  "type": "string"
        +}
      • removedInput schema / properties / persistent
        Removed value: -{
        -  "default": false,
        -  "title": "Persistent",
        -  "type": "boolean"
        -}
      • addedInput schema / properties / search_query
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Search Query"
        +}
      • removedInput schema / properties / targets
        Removed value: -{
        -  "items": {
        -    "type": "string"
        -  },
        -  "title": "Targets",
        -  "type": "array"
        -}
      • removedInput schema / required
        Removed value: -[
        -  "targets"
        -]
    • Addedverify_signer_offline
  3. 57 tool updatesv0.3.0
    • First observedadd_init_script
    • First observedbypass_debugger_trap
    • First observedcheck_detection
    • First observedclick
    • First observedclose_browser
    • First observedcompare_env
    • First observeddelete_cookies
    • First observeddump_jsvmp_strings
    • First observedevaluate_js
    • First observedevaluate_js_handle
    • First observedexport_state
    • First observedfreeze_prototype
    • First observedget_breakpoint_data
    • First observedget_console_logs
    • First observedget_cookies
    • First observedget_fingerprint_info
    • First observedget_jsvmp_log
    • First observedget_network_request
    • First observedget_page_content
    • First observedget_page_html
    • First observedget_page_info
    • First observedget_property_access_log
    • First observedget_request_initiator
    • First observedget_response_body_page
    • First observedget_script_source
    • First observedget_session_info
    • First observedget_storage
    • First observedget_trace_data
    • First observedgo_back
    • First observedhook_function
    • First observedhook_jsvmp_interpreter
    • First observedimport_state
    • First observedinject_hook_preset
    • First observedintercept_request
    • First observedlaunch_browser
    • First observedlist_network_requests
    • First observedlist_scripts
    • First observednavigate
    • First observedreload
    • First observedremove_hooks
    • First observedsave_script
    • First observedsearch_code
    • First observedsearch_code_in_script
    • First observedsearch_json_path
    • First observedsearch_response_body
    • First observedset_breakpoint_via_hook
    • First observedset_cookies
    • First observedset_storage
    • First observedstart_network_capture
    • First observedstop_intercept
    • First observedstop_network_capture
    • First observedtake_screenshot
    • First observedtake_snapshot
    • First observedtrace_function
    • First observedtrace_property_access
    • First observedtype_text
    • First observedwait_for

TDQS

A3.6/5.0
Disambiguation5/5

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.

Naming Consistency4/5

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.

Tool Count4/5

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.

Completeness5/5

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

ActivityMaintained
ResponsivenessSyncing

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

Related MCP Servers

  • A
    license
    B
    quality
    D
    maintenance
    An 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.
    36
    69
    7
    MIT
  • A
    license
    C
    quality
    B
    maintenance
    An 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.
    35
    27
    995
    Apache 2.0

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/WhiteNightShadow/camoufox-reverse-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server