proxy-mcp
proxy-mcp is an MCP server that runs an HTTP/HTTPS MITM proxy with traffic interception, TLS fingerprinting/spoofing, browser/process/Docker/Android interception, and Playwright-driven stealth browser automation.
Start/stop an explicit HTTP/HTTPS MITM proxy with auto-generated CA cert and inspect status/cert
Capture, list, search, and clear HTTP traffic with filters and per-exchange details
Add/update/remove interception rules: passthrough, mock, forward, drop, header injection, URL rewrite, request/response transforms
Chain global or per-host upstream proxies (SOCKS4/5, HTTP, HTTPS, PAC) with redacted credentials
Capture TLS fingerprints (JA3/JA4/JA3S) and spoof outgoing TLS+HTTP/2 fingerprints via browser presets
Launch stealth Chromium (cloakbrowser) or camoufox and drive it with navigation, snapshots, screenshots, JS evaluation, cookies/storage/network inspection
Spawn CLI/processes and attach Docker containers with proxy env vars and CA trust automatically
Intercept Android devices via ADB and Frida (cert injection, tunnels, SSL unpinning)
Record persistent sessions, import/export HAR, query/search bodies, and replay requests
Perform human-like mouse, click, type, scroll, and idle behavior on browser targets
Set up mobile/transparent proxy capture with iptables scripts for rogue-AP style interception
Provides comprehensive traffic interception for Android devices, including CA certificate injection via ADB, reverse tunneling, and SSL unpinning using Frida scripts.
Enables automated launching of the Brave browser with integrated proxy configuration for capturing and modifying web traffic.
Automates proxy configuration for curl commands by setting environment variables to route traffic through the MITM proxy for inspection.
Supports intercepting Deno network traffic by automatically configuring proxy environment variables for spawned processes.
Injects proxy settings and CA certificates into running Docker containers to capture and inspect containerized network traffic.
Enables monitoring and manipulation of Git network requests by automatically configuring proxy environment variables.
Allows for the interception of Node.js network traffic by configuring proxy environment variables and SSL certificate trust for spawned processes.
Routes npm network activity through the proxy by setting appropriate environment variables to capture and inspect package management traffic.
Enables interception of Python application traffic, including support for the requests library, through automated environment variable injection.
Routes yarn network activity through the proxy by setting appropriate environment variables to capture and inspect package management traffic.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@proxy-mcpintercept traffic to api.example.com and show the headers"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
proxy-mcp
proxy-mcp is an MCP server that runs an explicit HTTP/HTTPS MITM proxy (L7). It captures requests/responses, lets you modify traffic in-flight (headers/bodies/mock/forward/drop), supports upstream proxy chaining, and records TLS fingerprints for connections to the proxy (JA3/JA4) plus optional upstream server JA3S. Ships "interceptors" to route the cloakbrowser stealth browser, CLI tools, and Docker containers through the proxy, plus Playwright-driven browser automation with locator-based click, typing, scroll, and ARIA snapshots.
72 tools + 7 resources + 3 resource templates. Built on mockttp and cloakbrowser.
proxy-mcp is no longer published to npmjs. npm's publishing system has become too annoying to be worth it — expiring tokens that silently break releases, and a mandatory passkey/2FA enrollment maze just to change a package setting. Distribution now happens directly from this repository:
npx -y "github:yfe404/proxy-mcp#semver:^3"Versions ≤ 3.3.2 remain on npmjs but will never be updated —
npx -y proxy-mcp@latest silently stays stale. Update your MCP config to the
GitHub form above. See Setup.
Table of Contents
Related MCP server: Android Proxy MCP
Setup
Quick install (Claude Code)
claude mcp add proxy-mcp -- npx -y "github:yfe404/proxy-mcp#semver:^3"This installs proxy-mcp as an MCP server using stdio transport, straight from
GitHub — no registry involved. The #semver:^3 range resolves against this
repo's version tags, so new releases are picked up automatically.
Note: the first install compiles from source (a
preparebuild), so it takes a few seconds longer than a registry tarball — subsequent launches use the npx cache. Why not npmjs anymore? See the announcement at the top: their publishing system got too annoying.
Scopes:
# Per-user (available in all projects)
claude mcp add --scope user proxy-mcp -- npx -y "github:yfe404/proxy-mcp#semver:^3"
# Per-project (shared via .mcp.json, commit to repo)
claude mcp add --scope project proxy-mcp -- npx -y "github:yfe404/proxy-mcp#semver:^3"To pin an exact release instead, use github:yfe404/proxy-mcp#v3.4.0.
Prerequisites
Node.js 20+
From source (development)
git clone https://github.com/yfe404/proxy-mcp.git
cd proxy-mcp
npm install
npm run build# stdio transport (default) — used by MCP clients like Claude Code
node dist/index.js
# Streamable HTTP transport — exposes /mcp endpoint for scripting
node dist/index.js --transport http --port 3001--transport and --port also accept env vars TRANSPORT and PORT.
PROXY_MCP_DEBUG=1 adds debug lines to stderr, one per request the client
cancels: request aborted by client: <method> <url>.
PROXY_MCP_UPSTREAM_PASSWORD and PROXY_MCP_UPSTREAM_HOST keep an upstream
proxy password out of the transcript — see
Keeping the upstream password out of the transcript.
Manual MCP configuration
The configured server alias controls Claude's generated tool prefix. The examples below use proxy-mcp, so Claude Code exposes tools as mcp__proxy-mcp__<tool_name>. If you rename the server key to proxy, use mcp__proxy__<tool_name> instead.
Claude Code CLI:
# stdio (default)
claude mcp add proxy-mcp -- npx -y "github:yfe404/proxy-mcp#semver:^3"
# From local clone
claude mcp add proxy-mcp -- node /path/to/proxy-mcp/dist/index.js
# HTTP transport for scripting
claude mcp add --transport http proxy-mcp http://127.0.0.1:3001/mcp.mcp.json (project-level, commit to repo):
{
"mcpServers": {
"proxy-mcp": {
"command": "npx",
"args": ["-y", "github:yfe404/proxy-mcp#semver:^3"]
}
}
}Streamable HTTP transport:
{
"mcpServers": {
"proxy-mcp": {
"type": "streamable-http",
"url": "http://127.0.0.1:3001/mcp"
}
}
}HTTP Proxy Configuration
1) Start proxy and get endpoint
proxy_startUse the returned port and endpoint http://127.0.0.1:<port>.
2) Browser setup (recommended: interceptor)
Use the browser interceptor so proxy flags and cert trust are configured automatically. Launches cloakbrowser — a stealth-patched Chromium with source-level C++ fingerprint patches and humanize mode on by default:
interceptor_browser_launch --url "https://example.com"Drive the page with Playwright-backed tools (no CDP, no sidecar — target_id is all you need):
interceptor_browser_navigate --target_id "browser_<id>" --url "https://apify.com"
interceptor_browser_snapshot --target_id "browser_<id>"
interceptor_browser_screenshot --target_id "browser_<id>" --file_path "/tmp/shot.png"3) Browser setup (manual fallback)
If launching a browser manually, pass the proxy flag yourself:
google-chrome --proxy-server="http://127.0.0.1:<port>"4) CLI/process setup
Route any process through proxy-mcp by setting proxy env vars:
export HTTP_PROXY="http://127.0.0.1:<port>"
export HTTPS_PROXY="http://127.0.0.1:<port>"
export NO_PROXY="localhost,127.0.0.1"If the client verifies TLS, trust the proxy-mcp CA certificate (see proxy_get_ca_cert) or use the Terminal interceptor (interceptor_spawn) which sets proxy env vars plus common CA env vars (curl, Node, Python requests, Git, npm/yarn, etc.):
interceptor_spawn --command curl --args '["-s","https://example.com"]'Explicit curl examples:
curl --proxy http://127.0.0.1:<port> http://example.com
curl --proxy http://127.0.0.1:<port> https://example.com5) Upstream proxy chaining
Set optional proxy chaining from proxy-mcp to another upstream proxy (for geolocation, auth, or IP reputation):
Client/app → proxy-mcp (local explicit proxy) → upstream proxy (optional chaining layer)proxy_set_upstream --proxy_url "socks5://user:pass@upstream.example:1080"Supported upstream URL schemes: socks4://, socks5://, http://, https://, pac+http://.
Keeping the upstream password out of the transcript
Tool calls and tool results are both persisted by the MCP client. To avoid writing an upstream password there on every call, set it in the server's environment and pass a URL with a username but no password.
Two variables are required, and both have to be in the environment of the server process, which the MCP client spawns. Exporting them in the shell you launch the client from may reach it — CLI clients pass their own environment through — but that depends on the client and is lost the moment the server is started any other way. Put them in the client's server config:
variable | meaning |
| the password to fill in |
| the only hostname it may be sent to — a bare hostname, no scheme, port or path |
claude mcp add proxy-mcp \
-e PROXY_MCP_UPSTREAM_PASSWORD=s3cret \
-e PROXY_MCP_UPSTREAM_HOST=upstream.example \
-- npx -y "github:yfe404/proxy-mcp#semver:^3"{
"mcpServers": {
"proxy-mcp": {
"command": "npx",
"args": ["-y", "github:yfe404/proxy-mcp#semver:^3"],
"env": {
"PROXY_MCP_UPSTREAM_PASSWORD": "s3cret",
"PROXY_MCP_UPSTREAM_HOST": "upstream.example"
}
}
}
}Then omit the password from the call:
proxy_set_upstream --proxy_url "http://user@upstream.example:1080"
# routes as http://user:s3cret@upstream.example:1080Why the host variable exists. Without it, a caller who cannot read the
password could still name any host and have the password delivered there — the
proxy sends it on the first request, and the transcript would show only ***.
The hostname is matched case-insensitively and exactly, with no wildcards; the
port is not part of the match, so one variable covers a provider offering
several. A URL naming any other host is left alone. If
PROXY_MCP_UPSTREAM_PASSWORD is set and PROXY_MCP_UPSTREAM_HOST is not,
nothing is merged at all: a half-configuration fails closed rather than
becoming an unbound credential.
This keeps the password out of tool arguments and responses, not out of reach.
interceptor_spawnruns an arbitrary command as the server user, so a caller can read the client config file the password is configured in — and on Linux/proc/<pid>/environ. The variable removes the routine exposure of writing a credential into every tool call; it is not a sandbox, and anyone who can callinterceptor_spawnshould be treated as able to obtain the password.
The response reports which credential was used — passwordSource is env,
url or none. none means no password was applied to a URL that names a
user: either the credential is genuinely username-only, or the server does not
have both variables set for this host. The field is omitted for a URL with no
username, where the question does not arise.
Applies to proxy_set_upstream and proxy_set_host_upstream. A URL that
already carries a password is used as-is, so existing calls are unaffected. One
credential covers all upstreams at the pinned host; a URL without a username is
left alone.
Username-only credentials at the pinned host cannot be expressed. A URL with a username and no password is exactly the syntax that requests the merge, and
user:@hostcannot signal otherwise — the URL parser erases the empty password before the server sees it. If the pinned host authenticates on the username alone, unsetPROXY_MCP_UPSTREAM_PASSWORDfor that server.
socks*://upstreams: no:in the password. socks-proxy-agent splits the credential on the first:and keeps only what follows, sopa:sswould authenticate aspa. Rather than deliver half a password silently, a socks upstream is refused with an error whenPROXY_MCP_UPSTREAM_PASSWORDcontains:. The truncation itself is a toolchain limitation, not something this introduces — a literalsocks5://user:pa%3Ass@host:1080truncates the same way, and nothing can guard that.http://,https://andpac+http://upstreams take the whole password.
A
:in the username is refused on every scheme. Basic auth splits the decoded pair at the first colon (RFC 7617), and socks-proxy-agent does the same, so a username ofgro:upswith passwords3cretreaches the proxy as usergro, passwordups:s3cret— the merged password silently discarded. No scheme can carry it, so the merge refuses rather than guess. Put the whole credential inproxy_urlinstead.
Responses redact credentials — the password in userinfo, with path segments
masked and the query and fragment dropped, since a pac+http:// token may live
in any of those:
Global upstream set to http://user:***@upstream.example:1080/
Global upstream set to pac+http://pac.example.com/***proxy_status and the proxy://status resource are redacted the same way. A
PAC URL's filename is masked along with the rest of the path, so a confirmation
message shows the host and nothing else.
The username is not redacted. For several providers it is configuration rather than a secret — Apify Proxy encodes proxy group, country and sticky-session id there — and showing it is what makes the confirmation useful. If your provider puts a secret in the username field, do not rely on these messages being safe to share.
Typical geo-routing examples:
# Route ALL outgoing traffic from proxy-mcp via a geo proxy
proxy_set_upstream --proxy_url "socks5://user:pass@fr-exit.example.net:1080"
# Bypass upstream for local/internal hosts
proxy_set_upstream --proxy_url "http://user:pass@proxy.example.net:8080" --no_proxy '["localhost","127.0.0.1",".corp.local"]'
# Route only one hostname via a dedicated upstream (overrides global)
proxy_set_host_upstream --hostname "api.example.com" --proxy_url "https://user:pass@us-exit.example.net:443"
# Remove overrides when done
proxy_remove_host_upstream --hostname "api.example.com"
proxy_clear_upstreamFor HTTPS MITM, the proxy CA must be trusted in the target environment (proxy_get_ca_cert).
6) Validate and troubleshoot quickly
proxy_list_traffic --limit 20
proxy_search_traffic --query "example.com"Common issues:
Traffic from the wrong browser instance (fix: always pass
target_idfrominterceptor_browser_launch)HTTPS cert trust missing on target
NO_PROXYbypassing expected hostsFirst launch is slow: cloakbrowser downloads a ~200 MB stealth Chromium binary on first use (cached afterwards)
7) HAR import + replay
Import HAR into a persisted session, then analyze with existing session query/findings tools:
proxy_import_har --har_file "/path/to/capture.har" --session_name "imported-run"
proxy_list_sessions
proxy_query_session --session_id SESSION_ID --hostname_contains "api.example.com"
proxy_get_session_handshakes --session_id SESSION_IDReplay defaults to dry-run (preview only). Execute requires explicit mode:
# Preview what would be replayed
proxy_replay_session --session_id SESSION_ID --mode dry_run --limit 20
# Execute replay against original hosts
proxy_replay_session --session_id SESSION_ID --mode execute --limit 20
# Optional: override target host/base URL while preserving path+query
proxy_replay_session --session_id SESSION_ID --mode execute --target_base_url "http://127.0.0.1:8081"Note: imported HAR entries (and entries created by proxy_replay_session) do not carry JA3/JA4/JA3S handshake metadata. Use live proxy-captured traffic to analyze handshake fingerprints.
Boundaries
Only sees traffic configured to route through it (not a network tap or packet sniffer)
Spoofs outgoing JA3 + HTTP/2 fingerprint + header order (via impit — native Rust TLS impersonation), not JA4 (JA4 is capture-only)
Can add, overwrite, or delete HTTP headers; outgoing header order can be controlled via fingerprint spoofing
Returns its own CA certificate — does not expose upstream server certificate chains
TLS ClientHello Passthrough (browser via interceptor)
When cloakbrowser is launched via interceptor_browser_launch, proxy-mcp forwards the browser's original TLS ClientHello to the upstream server for document loads and same-origin sub-resource requests. The target server sees an authentic Chrome TLS fingerprint — not the proxy's.
This is a key difference from typical MITM proxies (mitmproxy, Charles, Fiddler) which re-terminate TLS with their own fingerprint, making MITM trivially detectable by anti-bot systems via JA3/JA4 analysis.
How to verify passthrough is working:
proxy_list_tls_fingerprints --hostname_filter "example.com"JA3 varies across requests to the same host — this is expected; Chrome randomizes cipher suite order per-connection (feature since Chrome 110+)
JA4 stays stable — same cipher/extension set, just different ordering
JA3 variation + JA4 stability = authentic Chrome TLS passthrough confirmed
When passthrough applies vs. when spoofing is needed:
Traffic source | TLS behavior | Action needed |
cloakbrowser via | Browser's native ClientHello forwarded (passthrough) | None — fingerprint is authentic |
cloakbrowser via | Re-issued via impit with spoofed TLS |
|
Non-browser clients (curl, Python, | Proxy's own TLS |
|
HAR replay ( | Proxy's own TLS |
|
Built on stealth browsers + Playwright
Browser automation uses cloakbrowser for stealth-patched Chromium, driven through Playwright. There is no CDP sidecar or hand-rolled stealth script in proxy-mcp. Downstream tools take a browser_* target from interceptor_browser_launch.
Capability | proxy-mcp |
See/modify DOM, run JS in page |
|
Read cookies, localStorage, sessionStorage | Yes — |
Capture HTTP request/response bodies | Via the MITM proxy (4 KB preview cap by default; |
Modify requests in-flight (headers, body, mock, drop) | Yes (declarative rules, hot-reload) |
Upstream proxy chaining (geo, auth) | Global + per-host upstreams across all clients (SOCKS4/5, HTTP, HTTPS, PAC) |
TLS fingerprint capture (JA3/JA4/JA3S) | Yes |
JA3 + HTTP/2 fingerprint spoofing | Proxy-side (impit re-issues matching requests with spoofed TLS 1.3, HTTP/2 frames, and header order) |
Intercept non-browser traffic (curl, Python, Docker containers) | Yes (interceptors) |
Human-like mouse/keyboard/scroll input |
|
Locator-based interaction |
|
Standard flow:
Call
proxy_startOptionally enable outbound fingerprint spoofing for cross-origin sub-resources:
proxy_set_fingerprint_spoof --preset chrome_136Call
interceptor_browser_launch --url "https://example.com"Drive the page:
interceptor_browser_navigate,interceptor_browser_snapshot,humanizer_click --selector "...",humanizer_type --text "..."Inspect traffic:
proxy_search_traffic --query "<hostname>"
Tools Reference
Lifecycle (4)
Tool | Description |
| Start MITM proxy, auto-generate CA cert |
| Stop proxy (traffic/cert retained). Deactivates this MCP session's interceptor targets; |
| Running state, port, rule/traffic counts |
| CA certificate PEM + SPKI fingerprint |
Upstream Proxy (4)
Tool | Description |
| Set global upstream proxy |
| Remove global upstream |
| Per-host upstream override |
| Remove per-host override |
Interception Rules (7)
Tool | Description |
| Add rule with matcher + handler |
| Modify existing rule |
| Delete rule |
| List all rules by priority |
| Test which rules would match a simulated request or captured exchange, with detailed diagnostics |
| Enable a disabled rule |
| Disable without removing |
Quick debugging examples:
# Simulate a request and see which rule would win
proxy_test_rule_match --mode simulate --request '{"method":"GET","url":"https://example.com/api/v1/items","headers":{"accept":"application/json"}}'
# Evaluate a real captured exchange by ID
proxy_test_rule_match --mode exchange --exchange_id "ex_abc123"Traffic Capture (4)
Tool | Description |
| Paginated traffic list with filters |
| Full exchange details by ID |
| Full-text search across traffic |
| Clear capture buffer |
Modification Shortcuts (3)
Tool | Description |
| Add/overwrite/delete headers on matching traffic (set value to |
| Rewrite request URLs |
| Return mock response for matched requests |
TLS Fingerprinting (9)
Tool | Description |
| Get JA3/JA4 client fingerprints + JA3S for a single exchange |
| List unique JA3/JA4 fingerprints across all traffic with counts |
| Legacy: enable JA3 spoofing (deprecated, use |
| Disable fingerprint spoofing |
| Return current TLS config (server capture, JA3 spoof state) |
| Toggle server-side JA3S capture (monkey-patches |
| Enable full TLS + HTTP/2 fingerprint spoofing via impit. Supports browser presets. |
| List available browser fingerprint presets (e.g. |
| Check fingerprint spoofing backend readiness |
Fingerprint spoofing works by re-issuing the request from the proxy via impit (native Rust TLS/HTTP2 impersonation via rustls). TLS 1.3 and HTTP/2 fingerprints (SETTINGS, WINDOW_UPDATE, PRIORITY frames) match real browsers by construction. The origin server sees the proxy's spoofed TLS, HTTP/2, and header order — not the original client's. When a user_agent is set (including via presets), proxy-mcp also normalizes Chromium UA Client Hints headers (sec-ch-ua*) to match the spoofed User-Agent (forwarding contradictory hints is a common bot signal). Browser exception: when cloakbrowser is launched via interceptor_browser_launch, document loads and same-origin requests use the browser's native TLS (no impit), preserving fingerprint consistency for bot detection challenges. Only cross-origin sub-resource requests are re-issued with spoofed TLS. Non-browser clients (curl, spawn, HAR replay) get full TLS + UA spoofing on all requests. Use proxy_set_fingerprint_spoof with a browser preset for one-command setup. proxy_set_ja3_spoof is kept for backward compatibility but custom JA3 strings are ignored (the preset's impit browser target is used instead). JA4 fingerprints are captured (read-only) but spoofing is not supported.
Interceptors (10)
Interceptors configure targets (browsers, processes, containers) to route their traffic through the proxy automatically.
Discovery (3)
Tool | Description |
| List all interceptors with availability and active target counts |
| Detailed status of a specific interceptor |
| Emergency cleanup: kill all active interceptors across all types |
Browser (3)
Tool | Description |
| Launch cloakbrowser (stealth Chromium) with proxy flags, SPKI cert trust, built-in humanize mode |
| Navigate the bound page via Playwright |
| Close a browser instance by target ID |
Stealth is source-level: cloakbrowser ships 48+ C++ patches so ja3n/ja4/akamai match real Chrome, navigator.webdriver is false, audio/canvas/WebGL fingerprints match real hardware. No JS stealth injection needed. First launch downloads a ~200 MB Chromium binary (cached afterwards).
Terminal / Process (2)
Tool | Description |
| Spawn a command with proxy env vars pre-configured (HTTP_PROXY, SSL certs, etc.) |
| Kill a spawned process and retrieve stdout/stderr |
Sets 18+ env vars covering curl, Node.js, Python requests, Deno, Git, npm/yarn.
Docker (2)
Tool | Description |
| Inject proxy env vars and CA cert into running container |
| Remove proxy config from container |
Two modes: exec (live injection, existing processes need restart) and restart (stop + restart container). Uses host.docker.internal for proxy URL.
Browser DevTools-equivalents (12)
Playwright-driven tools for the browser target. Each takes a target_id directly — no session binding, no sidecar.
Tool | Description |
| ARIA/role YAML snapshot of the page (or selector subtree) — optimized for LLM page reasoning |
| Screenshot. Writes to |
| Buffered console messages since launch, with type/text filters and pagination |
| Cookie listing with filters, pagination, truncated value previews |
| Get one cookie by |
| localStorage/sessionStorage key listing with value previews |
| Get one storage value by |
| Header field listing from proxy-captured traffic since the browser was launched |
| Get one full header field value by |
| Run a JS file in the page (file body wrapped as |
| Inject a JS file as |
| Append a |
Network data is sourced from the MITM proxy rather than a browser-side protocol — the proxy sees every wire request regardless of what the browser reported.
Stealth tradeoffs for JS injection:
Method | Cloakbrowser |
| Safe (isolated utility world) — rate-limit before reCAPTCHA, each call is CDP traffic |
| Best for stealth — pre-document, no DOM artifact |
| Detectable (DOM node, MutationObserver, CSP) |
References: Playwright evaluate, Playwright addInitScript.
Worlds and isolation — what your JS can and can't see
Playwright's evaluate runs in an isolated "utility" world that shares globals with the page's main world. An addInitScript patch to navigator.webdriver is visible to (a) your subsequent evaluate probes AND (b) anti-bot code the site loads. This is the model most "stealth playbooks" assume. Detection vectors are CDP-side (Runtime.evaluate chatter) — cloakbrowser's C++ patches mitigate those.
Practical rules:
Use case | Tool |
Read DOM / extract data |
|
Modify page state, click via JS |
|
Spoof navigator / window fingerprints |
|
Load a 3rd-party JS lib into the page |
|
Sessions (14)
Persistent, queryable on-disk capture for long runs and post-crash analysis.
Tool | Description |
| Start persistent session capture (preview or full-body mode) |
| Stop and finalize the active persistent session |
| Runtime status for persistence (active session, bytes, disk cap errors) |
| Import a HAR file from disk into a new persisted session |
| List recorded sessions from disk |
| Get manifest/details for one session |
| Indexed query over recorded exchanges |
| Search request/response bodies stored in a persistent session, with context snippets |
| Report JA3/JA4/JA3S handshake metadata availability for session entries |
| Fetch one exchange from a session (with optional full bodies) |
| Dry-run or execute replay of selected session requests |
| Export full session or filtered subset to HAR |
| Delete a stored session |
| Rebuild indexes from records after unclean shutdown |
proxy_get_session_exchange and proxy_export_har automatically decompress response bodies (gzip, deflate, brotli) based on the stored content-encoding header. The returned responseBodyText and responseBodyBase64 contain the decompressed content. Raw compressed bytes are preserved on disk for exact replay fidelity.
Note on proxy_start with persistence_enabled: true: this auto-creates a session. A subsequent proxy_session_start() call returns the existing active session instead of failing — no need to stop and re-start.
Humanizer — Playwright Input (5)
Human-like browser input via Playwright page.mouse / page.keyboard. Works with browser_* targets from interceptor_browser_launch. Cloakbrowser's own humanize patches apply when enabled at launch.
Tool | Description |
| Move the mouse to |
| Click a locator ( |
| Type text into the focused element via |
| Dispatch one Playwright |
| Simulate idle behavior with mouse micro-jitter and occasional micro-scrolls to defeat idle detection |
All tools require target_id from a prior interceptor_browser_launch. The engine maintains tracked mouse position across calls for coordinate-based move/click/idle behavior.
Behavioral details:
Mouse:
humanizer_movecallspage.mouse.move; locator clicks call Playwright locators and raw-coordinate clicks callpage.mouse.clickTyping:
humanizer_typecallspage.keyboard.type(text, { delay })whendelay_msis provided; no WPM, typo, or bigram model is implemented in proxy-mcpScrolling:
humanizer_scrollsends one wheel event with the requested deltaIdle: Periodic micro-jitter (±3px subtle / ±8px normal) and random micro-scrolls at configurable intensity
Resources
URI | Description |
| Proxy running state and config |
| CA certificate PEM |
| Traffic stats: method/status breakdown, top hostnames, TLS fingerprint stats |
| All interceptor metadata and activation status |
| Persistent session catalog + runtime persistence status |
| Current page URL/title for the most recently launched browser instance |
| Current page state for all active browser instances |
| Aggregate stats for one recorded session (resource template) |
| Time-bucketed request/error timeline (resource template) |
| Top errors/slow exchanges/host error rates (resource template) |
Usage Example
# Start the proxy
proxy_start
# Optional: start persistent session recording
proxy_session_start --capture_profile full --session_name "reverse-run-1"
# Use interceptors to auto-configure targets:
interceptor_browser_launch # Launch stealth browser with proxy
interceptor_spawn --command curl --args '["https://example.com"]' # Spawn proxied process
# Set upstream proxy for geolocation
proxy_set_upstream --proxy_url socks5://user:pass@geo-proxy:1080
# Mock an API response
proxy_mock_response --url_pattern "/api/v1/config" --status 200 --body '{"feature": true}'
# Inject auth headers (set value to null to delete a header)
proxy_inject_headers --hostname "api.example.com" --headers '{"Authorization": "Bearer token123"}'
# View captured traffic
proxy_list_traffic --hostname_filter "api.example.com"
proxy_search_traffic --query "error"
# TLS fingerprinting
proxy_list_tls_fingerprints # See unique JA3/JA4 fingerprints
proxy_set_ja3_spoof --ja3 "771,4865-..." # Spoof outgoing JA3 (for non-browser clients)
proxy_set_fingerprint_spoof --preset chrome_136 --host_patterns '["example.com"]' # Full fingerprint spoof
proxy_list_fingerprint_presets # Available browser presets
# Human-like browser interaction (browser_* target)
humanizer_move --target_id "browser_<id>" --x 500 --y 300
humanizer_click --target_id "browser_<id>" --selector "#login-button"
humanizer_click --target_id "browser_<id>" --role "button" --name "Sign in"
humanizer_type --target_id "browser_<id>" --text "user@example.com" --delay_ms 45
humanizer_scroll --target_id "browser_<id>" --delta_y 300
humanizer_idle --target_id "browser_<id>" --duration_ms 2000 --intensity subtle
# Run / inject JS in the page
interceptor_browser_evaluate --target_id "browser_<id>" --script_path /tmp/probe.js
interceptor_browser_inject_init_script --target_id "browser_<id>" --script_path /tmp/hook.js # applies on next navigation
interceptor_browser_add_script_tag --target_id "browser_<id>" --script_path /tmp/lib.js # DOM-visible — avoid for stealth
# Query/export recorded session
proxy_list_sessions
proxy_query_session --session_id SESSION_ID --hostname_contains "api.example.com"
proxy_export_har --session_id SESSION_IDArchitecture
State:
ProxyManagersingleton manages mockttp server, rules, trafficRule rebuild: Rules must be set before mockttp
start(), so rule changes trigger stop/recreate/restart cycleTraffic capture:
on('request')+on('response')events, correlated by request IDRing buffer: 1000 entries max, body previews capped at 4KB
TLS capture: Client JA3/JA4 from mockttp socket metadata; server JA3S via
tls.connectmonkey-patchTLS spoofing: impit (native Rust TLS/HTTP2 impersonation via rustls); in-process, no container needed
Interceptors: Managed by
InterceptorManager, each type registers independentlyBrowser: cloakbrowser (stealth Chromium, ~200 MB binary auto-downloaded on first launch) driven via Playwright
BrowserContext/PageHumanizer: Singleton engine using Playwright's
page.mouse/page.keyboard, plus local mouse-position tracking for idle jitter
Testing
npm test # All tests (unit + integration)
npm run test:unit # Unit tests only
npm run test:integration # Integration tests
npm run test:e2e # E2E fingerprint tests (requires cloakbrowser + internet)Credits
Core Libraries
Project | Role |
MITM proxy engine, rule system, CA generation | |
Native TLS/HTTP2 fingerprint impersonation (Rust via NAPI-RS) | |
Stealth-patched Chromium with source-level C++ fingerprint patches | |
Browser automation API driving cloakbrowser | |
MCP server framework |
Available Tools
72 toolshumanizer_clickA
Click an element. Pass one of: selector (CSS/XPath), role + optional name, text, label, or raw x+y coords as fallback. Locator-based calls auto-wait for visible.
| Name | Required | Description | Default |
|---|---|---|---|
| x | No | X coordinate fallback when no locator is given | |
| y | No | Y coordinate fallback when no locator is given | |
| name | No | Accessible name; used with role (e.g. 'Sign in') | |
| role | No | ARIA role (e.g. 'button', 'link', 'textbox') | |
| text | No | Visible text to match (e.g. 'Accept cookies') | |
| label | No | Form-field label text (e.g. 'Email address') | |
| button | No | Mouse button (default: left) | left |
| selector | No | CSS or XPath selector (e.g. 'button.submit', '//button[@id="go"]') | |
| target_id | Yes | Target ID from interceptor_browser_launch | |
| timeout_ms | No | Max ms to wait for locator to be visible + actionable (default: 15000) | |
| click_count | No | Number of clicks (default: 1, use 2 for double-click) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden, and it adds a genuinely useful trait: locator-based calls auto-wait for visibility while coordinate calls are a fallback. It doesn't describe timeout failure behavior or the 'humanized' nature implied by the name, but it does disclose the most important runtime distinction for an agent to invoke it correctly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the action, and every clause contributes information about target selection or waiting behavior. There is no duplication of schema fields or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 11-parameter tool with no output schema, the combination of the description and the fully documented schema is sufficient to invoke the tool: target_id, timeout, button, click_count, and locator options are all described. The main remaining gap is non-critical behavioral detail (failure/return behavior), so it is complete rather than exhaustive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real grouping semantics beyond the field descriptions: 'pass one of' establishes mutual exclusivity, 'role + optional name' defines a compound locator, and 'raw x+y coords as fallback' states precedence. This makes the parameter surface easier to reason about than the flat schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a concrete action and object ('Click an element') and enumerates the accepted targeting strategies. That verb+resource statement is enough to tell it apart from sibling humanizer_type/move/scroll tools, and it is not a tautology.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The intended use is explicit: when a click is required, pass one of the listed locator forms or fall back to coordinates. It doesn't name sibling alternatives or exclusion cases, but the action is unambiguous and the locator-selection guidance is practical, meeting the 'clear context, no exclusions' bar.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
humanizer_idleA
Simulate idle behavior with mouse micro-jitter and occasional micro-scrolls. Keeps the page 'alive' to avoid idle detection by bot-detection scripts.
| Name | Required | Description | Default |
|---|---|---|---|
| intensity | No | Idle intensity: 'subtle' (±3px jitter) or 'normal' (±8px jitter, more scrolls) | subtle |
| target_id | Yes | Target ID from interceptor_browser_launch | |
| duration_ms | Yes | How long to simulate idle behavior in ms |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the transparency burden. It discloses the synthetic nature ('simulate'), the exact behaviors (micro-jitter, occasional micro-scrolls), and the intended effect (avoiding idle detection). It could add caveats about visible cursor movement or detection limits, but the core behavior is clear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no wasted words. The first sentence front-loads the action and mechanism; the second gives the purpose. It is appropriately sized for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple simulation tool, the description plus fully described schema is enough to select and invoke it correctly. The only minor gap is that with no output schema, it does not state whether the call blocks for duration_ms or returns immediately, but that is unlikely to block correct usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and each parameter already has a useful description, including the intensity enum's exact jitter ranges. The tool description adds no parameter-level meaning beyond restating the general behavior, so the baseline score applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: simulate idle behavior, with concrete mechanisms (mouse micro-jitter and occasional micro-scrolls). This clearly separates it from sibling tools like humanizer_move or humanizer_scroll by framing the actions as idle-simulation rather than deliberate interaction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives an explicit context for use: keep the page 'alive' to avoid idle detection by bot-detection scripts. It does not, however, name alternatives or state when not to use it, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
humanizer_moveB
Move mouse to target coordinates via the backend Playwright page.
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | Destination X coordinate | |
| y | Yes | Destination Y coordinate | |
| target_id | Yes | Target ID from interceptor_browser_launch |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It only states the movement happens 'via the backend Playwright page' but does not say whether the movement is humanized/animated, whether it blocks until complete, or what happens on invalid coordinates or a missing browser target.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with no filler; the action, object, and destination are all front-loaded. Every word contributes meaningfully.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a straightforward pointer-move tool, the description plus fully documented schema is minimally viable. However, it leaves implicit the coordinate space (viewport vs page), the need for a previously launched browser, and any return/error behavior, which would be useful given there is no output schema or annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so x, y, and target_id are already well documented. The description's 'target coordinates' phrase adds no new parameter detail beyond what the schema provides, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('move') with a clear object ('mouse') and destination ('target coordinates'), making the action unambiguous. It is easily distinguishable from siblings like humanizer_click, humanizer_type, and humanizer_scroll, which involve different UI interactions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to use this tool versus alternatives such as humanizer_click, which likely also involves mouse movement before clicking. Prerequisites, such as requiring an active Playwright page from interceptor_browser_launch, are not mentioned beyond the schema's target_id reference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
humanizer_scrollA
Dispatch a wheel event. Raw page.mouse.wheel — single event, not multi-step.
| Name | Required | Description | Default |
|---|---|---|---|
| delta_x | No | Horizontal scroll delta in pixels (default: 0) | |
| delta_y | Yes | Vertical scroll delta in pixels (positive = scroll down) | |
| target_id | Yes | Target ID from interceptor_browser_launch |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the disclosure burden, and it does disclose the key behavior: exactly one raw wheel event is dispatched, not a smooth multi-step scroll. It is honest about the primitive nature and does not oversell humanization.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short clauses with no filler; the core action is front-loaded and the 'raw ... single event' qualifier earns its place by setting expectations. It is appropriately sized for the tool's simplicity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity event dispatcher with fully documented parameters, the description covers the essential context: what it sends, and that it is not a multi-step humanized sequence. It doesn't spell out return/error behavior, but that is minor at this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with delta_x, delta_y, and target_id all described in the schema, so the description need not add parameter detail. The description itself adds no parameter-specific meaning beyond calling it a wheel event.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
It states exactly what it does with a specific verb and resource ('Dispatch a wheel event') and adds that it is the raw page.mouse.wheel primitive rather than a multi-step action. This distinguishes it from the humanizer_move sibling, though it does not name the sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance about when to use this tool instead of alternatives; 'single event, not multi-step' implies a contrast with higher-level scrolling but never names humanizer_move or states selection conditions. An agent is left to infer usage from the name and sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
humanizer_typeB
Type text into the focused element via page.keyboard.type.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Text to type | |
| delay_ms | No | Optional Playwright delay per character in ms. | |
| target_id | Yes | Target ID from interceptor_browser_launch |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds a useful behavioral detail: typing targets whatever element currently has focus and uses keyboard events via page.keyboard.type. Since no annotations are provided, this helps, but it does not state what happens when nothing is focused, whether existing text is replaced or appended, or what side effects typing may cause.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that front-loads the action and no filler. It is minimal but every word contributes to the core behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple and the schema covers all parameters, so the basic call contract is visible. However, with no output schema and no annotations, the description omits return/error behavior and failure conditions such as missing focus or inactive browser.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so text, delay_ms, and target_id are already documented in the schema. The description adds only the 'focused element' context and no further parameter-level semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete action ('type') and a resource ('focused element') plus the Playwright mechanism ('page.keyboard.type'). The verb distinguishes it from sibling humanizer_click/scroll/idle, though it doesn't explicitly name an alternative tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to choose this tool over humanizer_click/evaluate or how to prepare the element to receive focus. Use is only implied by the tool name and sibling set, not explicitly described.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
interceptor_browser_add_script_tagA
Append a element to the current page (Playwright page.addScriptTag). WARNING: injects a real DOM node visible to MutationObserver, document.scripts, and CSP. Avoid for anti-bot stealth — prefer interceptor_browser_inject_init_script (no DOM node) when you need page-scope execution.
| Name | Required | Description | Default |
|---|---|---|---|
| target_id | Yes | Target ID from interceptor_browser_launch | |
| script_path | Yes | Absolute path to a .js file to inject as <script>. | |
| script_type | No | `classic` (default) or `module`. | classic |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does so well. It explicitly warns that the tool injects a real DOM node visible to MutationObserver, document.scripts, and CSP, which is a critical behavioral trait an agent cannot infer from the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: the core action and Playwright mapping come first, followed by a high-value warning and sibling alternative. Every sentence earns its place with no redundant wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a relatively simple injection tool with fully documented parameters, the description provides the key behavioral warning and the main alternative. The absence of an output schema is acceptable here since the critical operational concern is the DOM-visible side effect, which is covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all three parameters and the enum values. The description adds little parameter-specific detail beyond identifying the underlying Playwright behavior, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description begins with a specific verb and resource: 'Append a <script> element to the current page,' and grounds it in Playwright's page.addScriptTag. It clearly identifies what the tool does and distinguishes it from the sibling interceptor_browser_inject_init_script by highlighting the DOM-node difference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit usage guidance: avoid for anti-bot stealth and prefer interceptor_browser_inject_init_script when page-scope execution is needed. This directly routes an agent to the correct sibling tool and states the condition that should trigger the alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
interceptor_browser_closeA
Close a browser instance launched by interceptor_browser_launch.
| Name | Required | Description | Default |
|---|---|---|---|
| target_id | Yes | Target ID from interceptor_browser_launch |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description only states the action without revealing side effects or permissions. For a close operation, this is adequate but could be more transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence with no unnecessary words, effectively communicating the tool's purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one parameter and no output schema, the description provides all necessary context: what it closes and how to identify the instance.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 100% coverage, and the description adds context by specifying that target_id comes from interceptor_browser_launch, going beyond just repeating the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'close' and the resource 'browser instance launched by interceptor_browser_launch'. It distinguishes from sibling tools by referencing the specific launch tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implicitly indicates it is used to close a browser opened by interceptor_browser_launch, but no explicit alternatives or when-not-to-use guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
interceptor_browser_evaluateA
Execute a JS file in the page and return its result. Source is loaded from script_path (absolute path). The file body is wrapped in an arrow function receiving __args (so the file may return value; directly and access the optional args object). Runs in Playwright's isolated utility world (different window, same DOM). Reads are invisible to the page; mutations to shared prototypes/globals are observable by page scripts. For main-world patching use interceptor_browser_inject_init_script. Rate-limit before reCAPTCHA: each call emits CDP traffic that behavioural scorers count.
| Name | Required | Description | Default |
|---|---|---|---|
| args | No | Optional JSON-serialisable args object, available inside the script as `__args`. | |
| target_id | Yes | Target ID from interceptor_browser_launch | |
| script_path | Yes | Absolute path to a .js file. File body is the function body; use `return` to send a value back. | |
| value_max_chars | No | Max characters of the JSON-stringified return value (default: 20000, max 16000000). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the isolated utility world, that reads are invisible, that mutations to shared prototypes/globals are observable, and that each call emits CDP traffic counted by behavioral scorers. It does not cover error handling or return format explicitly, but the schema hints at JSON-stringified results. This is above-average transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded with the core purpose. Each sentence adds value: execution, wrapping, isolation, visibility, alternative, and rate-limit caution. It could be slightly trimmed, but nothing is wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of browser JS execution and the lack of an output schema, the description covers key aspects: isolation, return mechanism, and an important usage constraint (rate limiting). It doesn't detail error scenarios or exact return formatting, but the schema for value_max_chars implies JSON-stringified output. Overall, sufficient for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds meaningful context beyond the schema: the file body is wrapped in an arrow function and can return a value via `return`, and args are available as `__args`. These details explain how the parameters are used, exceeding the schema's basic descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource ('Execute a JS file in the page and return its result') and distinguishes itself from the main-world patching tool by naming interceptor_browser_inject_init_script as the alternative for that use case. It clearly identifies what the tool does and what it is not for.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly directs the agent to use interceptor_browser_inject_init_script for main-world patching, which implies this tool is for the isolated utility world. It also warns about rate-limiting before reCAPTCHA. It doesn't cover all alternative tools (like add_script_tag), but the most relevant distinction is made.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
interceptor_browser_get_cookieA
Get one cookie by cookie_id with full value (subject to a hard cap to keep output bounded).
| Name | Required | Description | Default |
|---|---|---|---|
| cookie_id | Yes | cookie_id from interceptor_browser_list_cookies | |
| target_id | Yes | Target ID from interceptor_browser_launch | |
| value_max_chars | No | Max characters for cookie value (default: 20000) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, so description must disclose behavior. Mentions 'full value' and 'hard cap', but lacks details like truncation behavior, auth requirements, or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, front-loaded with verb and resource. No extraneous words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema; description mentions 'full value' but not structure. Adequate for a simple retrieval tool, but could specify return format or error handling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 100% description coverage. Description adds little beyond restating the key parameters (cookie_id) and the cap concept. Baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states action ('Get'), resource ('one cookie'), identifier ('by cookie_id'), and constraint ('hard cap'). Distinct from sibling tools like list_cookies.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implicitly suggests usage after list_cookies (cookie_id from there). Mentions hard cap for output bounding, but no explicit when-not or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
interceptor_browser_get_network_fieldB
Get one full header field value from proxy-captured traffic by field_id.
| Name | Required | Description | Default |
|---|---|---|---|
| field_id | Yes | field_id from interceptor_browser_list_network_fields | |
| target_id | Yes | Target ID from interceptor_browser_launch | |
| value_max_chars | No | Max characters for returned value (default: 20000) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavioral traits. It only states 'Get', implying a read operation, but does not mention whether it requires prior capture, what happens if the field_id is invalid, or any side effects. The default max_chars is in schema but not described. Missing critical behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that is concise and front-loaded with the core purpose. No redundant or irrelevant information. Every word contributes to understanding the tool's function.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Without an output schema, the description should clarify the return format (e.g., string value, JSON). It mentions 'full header field value' but doesn't specify if it's the raw header line or just the value. Error scenarios are not covered. Adequate for a simple getter but could be more thorough given the tool's role in a complex proxy workflow.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage with descriptions for all parameters. The description adds no additional meaning beyond the schema; it does not explain what constitutes a 'full header field value' or how to interpret the returned value. Baseline 3 is appropriate as the schema already defines the parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and the resource 'one full header field value from proxy-captured traffic', with the method 'by field_id'. This distinguishes it from sibling tools like interceptor_browser_list_network_fields which lists fields, and other tools that capture traffic. The purpose is specific and actionable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives (e.g., when to get a single field vs. listing all fields). No mention of prerequisites, such as having captured traffic first, or when not to use this tool. The description is purely declarative without usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
interceptor_browser_get_storage_valueB
Get one localStorage/sessionStorage value by item_id.
| Name | Required | Description | Default |
|---|---|---|---|
| origin | No | Optional origin override (must match current page origin) | |
| item_id | Yes | item_id from interceptor_browser_list_storage_keys | |
| target_id | Yes | Target ID from interceptor_browser_launch | |
| storage_type | Yes | Storage type | |
| value_max_chars | No | Max characters for returned value (default: 20000) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. The description does not disclose behavioral traits such as whether the tool returns null for missing keys, errors on invalid storage type, or has side effects. With no annotations, the description carries the full burden but offers minimal transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence that conveys the core action efficiently. No redundant words or filler. Every word contributes meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 5 parameters and no output schema, the description is minimally adequate. It explains the resource and key parameter but omits return format, error conditions, or handling of optional parameters like origin or value_max_chars. Overall, functional but leaves room for exploration.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description adds no extra meaning beyond the schema; it only reiterates the item_id parameter. No parameter format, constraints, or dependencies are clarified beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly specifies the verb 'Get', the resource 'one localStorage/sessionStorage value', and the key parameter 'item_id'. It distinguishes this tool from siblings like 'interceptor_browser_list_storage_keys' which lists keys rather than values.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives (e.g., when needing all keys or bulk values). No mention of prerequisites like a launched browser or storage context. The description lacks contextual cues for appropriate invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
interceptor_browser_inject_init_scriptA
Inject a JS file as an init script (Playwright page.addInitScript). Runs before any page script on every subsequent navigation/frame. Runs in the isolated utility world — no DOM artifact; patches to shared prototypes/globals reach the page main world via utility-world sharing. Does NOT affect the currently loaded document — navigate again to apply.
| Name | Required | Description | Default |
|---|---|---|---|
| target_id | Yes | Target ID from interceptor_browser_launch | |
| script_path | Yes | Absolute path to a .js file to inject before page scripts on every load. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden and does it well. It discloses the isolated utility world execution, the absence of a DOM artifact, that prototype/global patches reach the main world via utility-world sharing, and the critical caveat that the current document is unaffected. This is rich, non-obvious behavior beyond what the schema reveals.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences with zero filler. The core action and timing are front-loaded, followed by the isolated-world behavior and the navigation caveat. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter action with no output schema, the description provides everything an agent needs to invoke it correctly: target_id and script_path are covered by the schema, and the description explains when it runs, where it runs, and the key limitation about the current document. No critical operational detail is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description reinforces the meaning of script_path by explaining when it executes, but it does not add parameter-specific semantics beyond what the schema already states. target_id is adequately documented in the schema as coming from interceptor_browser_launch.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Inject a JS file as an init script') and clarifies the exact execution timing. It effectively distinguishes this tool from one-off injection/evaluation tools like interceptor_browser_add_script_tag and interceptor_browser_evaluate by emphasizing it runs on every subsequent navigation/frame and not the current document.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly conveys when to use the tool: when a script must run before page scripts on every future navigation/frame. It also gives an exclusion by noting it does not affect the currently loaded document and instructs to navigate again to apply. It stops short of explicitly naming sibling alternatives, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
interceptor_browser_launchA
Launch cloakbrowser (stealth Chromium) with proxy flags and SPKI certificate trust. Built-in source-level fingerprint patches + humanize mode. Driven via Playwright — locator-based tools replace CDP.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | URL to open (default: about:blank) | |
| locale | No | BCP 47 locale, e.g. 'en-US' | |
| headless | No | Run headless (default: false) | |
| humanize | No | Enable cloakbrowser's humanize mode (default: true) | |
| timezone | No | IANA timezone, e.g. 'America/New_York' | |
| human_preset | No | Human behavior preset | default |
| viewport_width | No | Viewport width in px | |
| viewport_height | No | Viewport height in px |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden. It discloses behavioral aspects: launching with proxy and SPKI trust, source-level fingerprint patches, humanize mode, and Playwright driving. However, it lacks details on side effects, prerequisites (e.g., proxy setup), error conditions, or return value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is exceptionally concise: two sentences (40 words) with no filler. Every word adds value: first sentence states purpose and key features, second clarifies technical driver and subsequent tool usage. It is front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of output schema and annotations, the description should cover return values and setup dependencies. It mentions Playwright and locator tools but does not specify what the tool returns (e.g., browser session ID) or prerequisites (e.g., proxy configuration). This is adequate but has clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 100% description coverage for all 8 parameters, each with defaults and one enum. The description does not add additional meaning beyond the schema, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool 'launch[es] cloakbrowser (stealth Chromium)' with specific features (proxy flags, SPKI trust, fingerprint patches, humanize mode). It differentiates from sibling tools like interceptor_camoufox_launch by specifying the browser type and mentioning Playwright-driven locator tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for launching a stealth browser for tasks requiring fingerprint protection and humanization, but it does not explicitly state when to use this tool versus alternatives (e.g., interceptor_camoufox_launch) or mention scenarios where it should not be used.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
interceptor_browser_list_consoleB
List console messages buffered since the browser was launched. Types: log, info, warning, error, debug, etc.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max messages to return (default: 50, max: 500) | |
| types | No | Filter by console message types | |
| offset | No | Offset into results (default: 0) | |
| target_id | Yes | Target ID from interceptor_browser_launch | |
| text_filter | No | Filter by text substring |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. Description mentions 'buffered since browser launch' but does not disclose whether reading clears the buffer, any side effects, or other behavioral traits beyond listing. Full burden falls on description; significant gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence plus type enumeration. Extremely concise and front-loaded with purpose. Every piece of information earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Adequate for basic understanding of purpose. Missing return format details (no output schema) and no explanation of pagination or filtering behavior beyond parameter descriptions. Could be more complete given five parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the description adds minor value by listing example console types (log, info, warning, debug) beyond schema. However, no additional semantics are provided for other parameters beyond schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it lists console messages buffered since browser launch and enumerates types. Name and description align well. Among siblings like interceptor_browser_list_cookies, it distinguishes by resource (console) but does not explicitly differentiate usage.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. No mention of prerequisites (e.g., needing a launched browser), when not to use, or relationship to other list tools. Usage context is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
interceptor_browser_list_cookiesB
List cookies from the browser context with pagination and truncated value previews.
| Name | Required | Description | Default |
|---|---|---|---|
| full | No | Return full cookie values instead of previews (capped at 20000 chars). Overrides value_max_chars. | |
| sort | No | Sort order (default: name) | name |
| limit | No | Max cookies to return (default: 50, max: 500) | |
| offset | No | Offset into results (default: 0) | |
| target_id | Yes | Target ID from interceptor_browser_launch | |
| url_filter | No | Filter cookies by domain/path substring | |
| name_filter | No | Filter cookies by name substring | |
| domain_filter | No | Filter cookies by domain substring | |
| value_max_chars | No | Max characters for cookie value previews (default: 256) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden but only discloses pagination and truncated value previews. It does not explicitly state that the operation is read-only or that it requires an active browser context, though the target_id parameter implies the latter.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is front-loaded with the core action and key features. It contains no unnecessary words, making it highly concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 9 parameters and no output schema, the description is insufficient. It omits details about filtering parameters (url_filter, domain_filter, name_filter), sorting, and any information about the response format. The agent would need to infer too much from the schema alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds context by mentioning pagination and truncated value previews, which relates to parameters like offset, limit, value_max_chars, and full. This provides meaning beyond the schema's individual parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it lists cookies from the browser context, which is a specific verb+resource. It also mentions pagination and truncated value previews, but does not explicitly distinguish from the sibling tool 'interceptor_browser_get_cookie' which retrieves a single cookie.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like 'interceptor_browser_get_cookie' or other filtering tools. The description does not mention when to use this for bulk listing versus single retrieval.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
interceptor_browser_list_network_fieldsA
List request/response header fields from proxy-captured traffic since the browser was launched, with pagination and truncation.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max fields to return (default: 50, max: 500) | |
| offset | No | Offset into results (default: 0) | |
| direction | No | Header direction (default: both) | both |
| target_id | Yes | Target ID from interceptor_browser_launch | |
| url_filter | No | Filter by URL substring | |
| method_filter | No | Filter by HTTP method | |
| status_filter | No | Filter by response status code | |
| hostname_filter | No | Filter by hostname substring | |
| value_max_chars | No | Max characters for header value previews (default: 256) | |
| header_name_filter | No | Filter by header name substring |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries full burden. It discloses read-only behavior (listing), pagination, and value truncation. It does not mention side effects, but since it's a list operation, none are expected. The description is transparent about scope and features.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that front-loads the core purpose and key features. No redundant words or information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (10 parameters, multiple filters, no output schema), the description provides a high-level summary but omits details like filter combination logic, result ordering, and behavior when no results match. Schema covers parameter semantics, but behavioral completeness could be improved.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameters are already well-documented. The description adds context about pagination and truncation, but does not significantly enhance understanding beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it lists request/response header fields from proxy-captured traffic since browser launch, with pagination and truncation. This distinguishes it from sibling tools like interceptor_browser_get_network_field and proxy_list_traffic.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like interceptor_browser_get_network_field or proxy_list_traffic. It does not mention prerequisites or exclusion criteria, leaving the agent to infer context from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
interceptor_browser_list_storage_keysA
List localStorage/sessionStorage keys for the current origin with pagination and truncated value previews.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max items to return (default: 50, max: 500) | |
| offset | No | Offset into results (default: 0) | |
| origin | No | Optional origin override (must match current page origin) | |
| target_id | Yes | Target ID from interceptor_browser_launch | |
| key_filter | No | Filter by key substring | |
| storage_type | Yes | Storage type | |
| value_max_chars | No | Max characters for storage value previews (default: 256) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description must bear the full burden. It discloses read-only behavior and the truncation feature but omits potential errors, permission requirements, or performance impact. Schema already covers parameters.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence that efficiently conveys the core purpose and key features. No redundant or extraneous information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 7 parameters and no output schema, the description explains the main goal (list keys with truncated values) but does not specify the output format (e.g., list of key-value objects). However, the schema and inference from similar tools fill most gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds a summary of pagination and truncation, but does not provide additional meaning beyond what the schema already describes for each parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the action (list), resource (localStorage/sessionStorage keys), context (current origin), and notable features (pagination, truncated value previews). It clearly distinguishes from sibling tools that get a single value or list other storage types.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives like interceptor_browser_get_storage_value. The schema implies a prerequisite (target_id from interceptor_browser_launch) but the description does not mention it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
interceptor_browser_screenshotA
Take a screenshot of the bound page. Saves to file_path if provided; otherwise reports byte count without embedding the image.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Image format (default: png) | png |
| quality | No | JPEG quality 0-100 (ignored for png) | |
| file_path | No | Optional path to save screenshot | |
| full_page | No | Capture the full scrollable page | |
| target_id | Yes | Target ID from interceptor_browser_launch |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It discloses the key behavioral trait: saving to file or reporting byte count. However, it does not mention if the tool waits for page load, timeouts, or whether it is destructive (though screenshots are generally read-only). The term 'bound page' is somewhat ambiguous.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no wasted words. The most important information (action, conditional behavior) is front-loaded. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description covers the return behavior (byte count) but lacks details on error handling, page load waiting, or differentiation from sibling interceptor_browser_snapshot. The complexity is low, so it is adequate but not thorough.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 100% coverage for all 5 parameters, so baseline is 3. The description adds value by explaining the conditional role of file_path, but does not elaborate on format, full_page, or quality beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('take a screenshot'), resource ('bound page'), and conditional behavior (file path or byte count). It is specific and distinct from sibling tools like interceptor_browser_navigate or interceptor_browser_evaluate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage after launching a page but does not provide explicit guidance on when to use this tool versus similar alternatives like interceptor_browser_snapshot. No when-not-to-use or exclusion criteria are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
interceptor_browser_snapshotA
Take an ARIA accessibility snapshot of the bound page (YAML-formatted role tree). Great for LLM-driven page understanding without parsing HTML.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Snapshot mode — 'ai' adds ref attributes for locator reuse | default |
| selector | No | Root selector to snapshot (default: 'body') | body |
| target_id | Yes | Target ID from interceptor_browser_launch |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must carry the full burden of behavioral disclosure. It describes the output format but does not mention any side effects, permissions required, rate limits, or potential destructiveness. The description implies a read-only operation but lacks explicit statements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that conveys the core purpose and value proposition without any fluff. It is appropriately sized and front-loaded with the key action and output format.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low complexity (3 simple parameters, no nested objects, no output schema) and full parameter descriptions in the schema, the description is fairly complete for the tool's purpose. However, it lacks behavioral transparency and usage guidelines, leaving some gaps for an agent to fully understand context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema already documents all parameters (target_id, selector, mode). The description adds no additional meaning beyond the schema; it only mentions the output format. Hence baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool takes an 'ARIA accessibility snapshot' and outputs a 'YAML-formatted role tree'. It distinguishes from sibling tools like interceptor_browser_screenshot (visual) and interceptor_browser_evaluate (JS execution) by specifying the accessibility focus and format.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides usage context ('Great for LLM-driven page understanding without parsing HTML') but does not explicitly state when to use or when not to use this tool compared to alternatives. No exclusions or alternative recommendations are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
interceptor_deactivate_allA
Kill ALL active interceptors across all types. Emergency cleanup — stops all browser instances, kills spawned processes, cleans Docker.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully carries the behavioral disclosure burden. It clearly states this is a destructive, broad-stroke operation: stopping all browser instances, killing spawned processes, and cleaning Docker. This is more transparent than most tool descriptions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, front-loads the critical action and scope, and contains no filler. Every phrase adds relevant information about what the tool does and its impact.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter destructive cleanup tool, the description adequately covers what will be affected and why it should be used. It does not explain what happens after execution (e.g., whether state is recoverable), but that is a minor gap given the explicit emergency-cleanup framing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema is empty, so there are no parameter semantics to clarify. The baseline of 4 applies because no parameter documentation is needed; the description's focus on scope and effects is sufficient.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Kill'), a clearly bounded resource ('ALL active interceptors across all types'), and the broader scope ('browser instances, spawned processes, Docker'). This distinguishes it from sibling tools like interceptor_kill and interceptor_status, which target individual interceptors or query state.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It identifies an explicit use case: 'Emergency cleanup', which signals the appropriate trigger for invoking this tool. It does not explicitly name alternatives or state when not to use it, but the context of an emergency cleanup is clear enough to guide selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
interceptor_docker_attachA
Inject proxy env vars and CA certificate into a Docker container. Two modes: 'exec' (inject into running container) or 'restart' (stop + restart with proxy config).
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Injection mode: 'exec' (live injection) or 'restart' (stop + restart) | exec |
| container_id | Yes | Docker container ID or name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of disclosure. It correctly indicates the tool modifies the container (injecting env vars and CA cert), and the 'restart' mode stops and restarts the container. However, it doesn't mention potential side effects, permissions required, or success/failure signals, which would enhance transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise: two sentences that front-load the core purpose and then detail the two modes. No redundant or unnecessary text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having no output schema, the description does not mention return values, error conditions, or what happens after injection (e.g., container remains running?). This lack of contextual information for a mutation tool is a notable gap, reducing completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters. The description adds minimal value beyond schema: it rephrases the enum descriptions but does not explain what values to use or constraints. Baseline of 3 is appropriate as schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: injecting proxy env vars and CA certificate into a Docker container. It distinguishes two modes ('exec' vs 'restart'), making it easy to understand the core operation and differentiate from siblings like interceptor_docker_detach.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the two modes and their basic behavior, but lacks guidance on when to choose one over the other or prerequisites (e.g., container must be running). No explicit 'when not to use' or alternative tools are mentioned, leaving some ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
interceptor_docker_detachA
Remove proxy configuration from a Docker container and clean up injected files.
| Name | Required | Description | Default |
|---|---|---|---|
| target_id | Yes | Target ID from interceptor_docker_attach |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, so description carries burden. It discloses the removal and cleanup actions, but doesn't specify side effects, permissions, or prerequisites.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, no unnecessary words, front-loaded with action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given low complexity (one parameter, no output schema), the description is sufficient for understanding purpose and parameter origin. Minor omission: specifics of proxy configuration or files cleaned.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with description 'Target ID from interceptor_docker_attach'. Description does not add further meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool removes proxy configuration and cleans up injected files from a Docker container, distinguishing it from sibling interceptor_docker_attach which presumably adds such configuration.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use or alternatives. Implies use after attach, but no exclusions or context provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
interceptor_killA
Kill a spawned process by target ID. Also retrieves final stdout/stderr output.
| Name | Required | Description | Default |
|---|---|---|---|
| target_id | Yes | Target ID from interceptor_spawn |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description bears full responsibility. It discloses the key behavioral trait of retrieving final stdout/stderr output, which goes beyond a simple kill. However, it does not mention error handling or what happens if the target ID is invalid.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short, front-loaded sentences with no extraneous words. The first sentence states the primary action, the second adds important context. Excellent brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity of the tool (one parameter, no output schema), the description covers the main functionality adequately. It mentions output retrieval. Minor gaps include no mention of return format or behavior on invalid target ID, but overall sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the parameter 'target_id' already has a clear description. The description adds no further semantic value beyond restating 'by target ID.' Baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly specifies the action: 'Kill a spawned process by target ID.' It also adds a side effect of retrieving final stdout/stderr. This distinguishes it from sibling tools like interceptor_spawn (creates) and interceptor_list (lists).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for terminating a process and retrieving its output. It references the target ID from interceptor_spawn, but does not explicitly state when not to use it or suggest alternatives. Still, the context is clear enough for an agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
interceptor_listA
List all interceptors with their availability and active targets. Shows the Browser, Terminal and Docker interceptors.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It states it lists availability and active targets, which implies a read-only operation, but it does not explicitly confirm it is non-destructive or disclose any potential side effects, permissions, or output details. For a simple list tool, this is adequate but not thorough.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with no redundancy. The key information (lists all interceptors, shows availability and targets, names the interceptor types) is front-loaded. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter listing tool with no output schema, the description is fairly complete: it names the tool's action, the scope (all interceptors), and the data shown. It could explicitly state the return format or confirm it is read-only, but given the simplicity, the gap is minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and the schema coverage is 100% (empty properties). The description adds value by specifying what will be listed (availability, active targets, and interceptor types), which compensates for the absence of parameter details. Since there are no parameters, the baseline is 4, and the description meets it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'List', the resource 'all interceptors', and specifies what it shows (availability and active targets). It also names the specific interceptors (Browser, Terminal, Docker), which helps distinguish it from sibling tools like interceptor_status or interceptor_deactivate_all. However, it does not explicitly contrast with a close sibling, so it misses the top score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. There is no mention of 'use for an overview' or 'instead of interceptor_status'. The description only explains what it does, not when to select it over other interceptor-related tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
interceptor_spawnA
Spawn a command with proxy env vars pre-configured (HTTP_PROXY, HTTPS_PROXY, SSL_CERT_FILE, NODE_EXTRA_CA_CERTS, CURL_CA_BUNDLE, and 15+ more). Traffic automatically routes through the MITM proxy.
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | No | Working directory (default: current) | |
| env | No | Additional env vars to set | |
| args | No | Command arguments | |
| command | Yes | Command to run (e.g., 'curl', 'node', 'python') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses that traffic routes through MITM proxy, but lacks details on command execution behavior (e.g., synchronous vs asynchronous, output handling) and required proxy state.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no fluff. First sentence front-loads the core purpose; second adds key behavioral context. Highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 4 parameters and no output schema, description covers the basic purpose and one behavioral aspect, but omits critical details like return value, error handling, and dependency on proxy being active. Adequate but incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema provides full coverage for all parameters. Description adds value by listing specific env variables (HTTP_PROXY, HTTPS_PROXY, etc.) and indicating there are more, enhancing parameter understanding beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it spawns a command with proxy env vars pre-configured. It distinguishes itself from sibling tools by focusing on running arbitrary commands with proxy settings, unlike browser or Android specific tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or when-not-to-use guidance. It implies usage for running commands through the proxy, but does not mention alternatives or prerequisites like ensuring the proxy is running.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
interceptor_statusB
Get detailed status of a specific interceptor, including all active targets and their details.
| Name | Required | Description | Default |
|---|---|---|---|
| interceptor_id | Yes | Interceptor ID (e.g., 'browser', 'terminal', 'docker') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses some return behavior ('including all active targets and their details'), which is genuinely useful. However, it does not address what happens for an unknown/inactive interceptor_id, whether the operation is read-only in practice, or any error/edge cases, so an agent cannot predict failure modes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One front-loaded sentence with zero filler. 'Get detailed status' leads immediately, and the 'including...' clause adds valuable return-content context without bloating the description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read-style tool with no output schema, the description covers the essentials: what it does and roughly what it returns. Minor gaps remain – behavior on invalid IDs, prerequisites such as the interceptor being active, and a richer description of the 'details' returned – but the core information an agent needs to invoke it correctly is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% – the single parameter interceptor_id is already documented with type and concrete examples ('browser', 'terminal', 'docker'). The tool description adds little beyond the schema, only reinforcing the 'specific interceptor' notion. Since the schema does the heavy lifting, the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource ('Get detailed status of a specific interceptor') and clarifies scope via 'specific' and 'including all active targets and their details.' This distinguishes it from sibling tools like interceptor_list, but the differentiation is implicit rather than explicit – it never names an alternative tool, so an agent must infer the boundary from tool names.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No usage guidance is provided. The description does not say when to use this tool versus interceptor_list, interceptor_spawn, or the interceptor_browser_* actions, nor does it state any prerequisites (e.g., the interceptor must be active or spawned first). Usage context is only implied by the word 'specific.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proxy_add_ruleB
Add an interception rule with a matcher and handler. Rules are evaluated by priority (ascending), first match wins.
| Name | Required | Description | Default |
|---|---|---|---|
| handler | Yes | What to do with matched requests | |
| matcher | Yes | Conditions to match requests | |
| priority | No | Priority (lower = higher priority, default: 100) | |
| description | Yes | Human-readable description of this rule |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits. It mentions evaluation order (priority ascending, first match wins) which is useful. However, it does not discuss side effects, limits, or idempotency, which would be expected for a creation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is brief (two sentences) and front-loaded with the main action. However, it could be structured more clearly, perhaps listing the required components separately. Still, it is not verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has complex nested parameters and no output schema. The description is minimal and does not explain what the tool returns (e.g., rule ID) or how it handles duplicate descriptions or priority conflicts. More context is needed for an agent to use it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds no extra meaning beyond the schema; it just mentions 'matcher and handler' which are already defined in detail in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (add), the resource (interception rule), and its components (matcher and handler). It also mentions evaluation order (priority ascending, first match wins), distinguishing it from sibling tools like proxy_update_rule or proxy_remove_rule.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. For example, it does not say to use proxy_update_rule for modifying existing rules or proxy_test_rule_match for testing. The description only states what the tool does, not 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.
proxy_check_fingerprint_runtimeA
Check fingerprint spoofing backend readiness without sending traffic.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully convey behavioral traits. It states the tool checks readiness without sending traffic, indicating safety, but it omits details such as whether the check is idempotent, what 'readiness' entails, any required preconditions, or possible side effects. This is insufficient for a mutation-related backend feature.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence that effectively communicates the tool's core function. No extraneous words; every part earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no parameters, no output schema, and no annotations, the description is minimal. It states the action but does not explain what 'readiness' means or how the result is structured. For a simple check tool, this is adequate but could be more helpful by clarifying the outcome.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has no parameters (0 params, 100% coverage). Per the baseline rule, a score of 4 is appropriate because the description adds no extra parameter information but does not need to compensate for schema gaps. The description could have explained the concept of 'fingerprint runtime' but is not required to.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly specifies the verb 'check', the resource 'fingerprint spoofing backend readiness', and adds the distinguishing detail 'without sending traffic'. This differentiates it from sibling tools like proxy_set_fingerprint_spoof or proxy_list_fingerprint_presets, which have different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'without sending traffic' implies a non-disruptive read operation, but no explicit guidance is given on when to use this tool versus alternatives like proxy_set_fingerprint_spoof. It doesn't specify prerequisites or expected context, leaving the agent to infer usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proxy_clear_ja3_spoofB
Disable fingerprint spoofing.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the full burden of behavioral disclosure. It merely says 'disable' but does not explain side effects, reversibility, state changes, or whether it affects other proxy settings. This lack of detail is insufficient for a tool that modifies proxy behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short sentence with no filler, making it very concise. However, it lacks any structure beyond that, such as separation of concerns or additional helpful context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no parameters and no output schema, the description is adequate for a simple toggle action, but it does not address potential side effects or the broader context within the proxy toolset. It misses opportunities to explain what fingerprint spoofing is or how to revert the action.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters (0 params, 100% schema coverage), so the description does not need to add parameter details. According to the rubric, 0 params yields a baseline score of 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Disable fingerprint spoofing' clearly states the action (disable) and the resource (fingerprint spoofing). The name includes 'ja3_spoof', which is a type of fingerprint, making the purpose very specific and distinguishable from sibling tools like proxy_set_ja3_spoof.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus its siblings, such as proxy_set_ja3_spoof or proxy_check_fingerprint_runtime. The description does not mention prerequisites, alternatives, or contextual triggers for disabling spoofing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proxy_clear_trafficA
Clear all captured traffic from the buffer.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Minimal disclosure beyond the verb 'clear', which implies destruction but lacks details on side effects, reversibility, or impact on other tool states. No annotations to supplement.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise single sentence that communicates the core function with no waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool, the description is adequate, though it lacks behavioral nuance. Could mention that traffic is permanently cleared, but not necessary for basic understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, so the description does not need to add parameter semantics. Baseline score of 4 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description specifies a clear action ('clear') and resource ('captured traffic from the buffer'), distinguishing it from sibling tools like proxy_list_traffic or proxy_export_har.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. Does not mention prerequisites, side effects, 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.
proxy_clear_upstreamA
Remove the global upstream proxy. Traffic will go directly to target servers.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. Description states effect (traffic goes directly) but no side effects or prerequisites. Adequate for a simple clear operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences, front-loaded with action. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Minimal but covers primary action. Lacks mention of return value, error conditions, or relationship to proxy_set_upstream. Adequate for simple tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters; schema coverage 100%. Description adds no parameter info, which is acceptable as no parameters exist.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description uses clear verb 'Remove' and specifies 'global upstream proxy', distinguishing it from siblings like proxy_set_upstream and proxy_remove_host_upstream.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies usage when removing global upstream proxy, but no explicit guidance on when to use vs alternatives like proxy_remove_host_upstream.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proxy_delete_sessionA
Delete a recorded session from disk.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes | Session ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
States deletion from disk, implying permanence, but lacks details about behavior if session is active, whether it's safe to call while proxy is running, or any side effects. No annotations to supplement, so description carries burden but is incomplete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence with no redundant or extraneous information. Efficiently communicates core action and resource.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While simple, the description omits preconditions (e.g., session must be stopped) and postconditions (e.g., session data cannot be recovered). For a destructive operation, more context would help an agent avoid errors. Output schema not present, so description could provide more return value context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 100% description coverage with 'Session ID' for the single parameter. The tool description adds no additional meaning beyond what the schema already provides, so baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb 'Delete' and resource 'recorded session from disk' clearly indicates purpose. Distinguishes from sibling tools like proxy_get_session, proxy_list_sessions, and proxy_session_start which perform different operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like proxy_session_stop (which stops but doesn't delete) or proxy_session_start (which creates). Does not mention prerequisites (e.g., session must be inactive) or that deletion is irreversible.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proxy_disable_ruleA
Disable an interception rule without removing it.
| Name | Required | Description | Default |
|---|---|---|---|
| rule_id | Yes | Rule ID to disable |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It correctly notes that the rule is not removed, implying nondestructive behavior. However, it does not specify side effects, reversibility, or whether the action affects active sessions. Basic transparency is present but could be richer.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, focused sentence that conveys the essential action without extraneous words. It is well-structured and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low complexity, single parameter, and no output schema, the description covers the core functionality. However, it could benefit from slightly more context (e.g., relation to enable/remove) but is sufficient for the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with one parameter (rule_id) adequately described. The description adds no additional meaning beyond the schema. Baseline 3 is appropriate as the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'disable' and the resource 'interception rule', and adds specificity 'without removing it' which distinguishes it from proxy_remove_rule. Sibling tools like proxy_enable_rule and proxy_remove_rule further differentiate the action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly state when to use this tool versus alternatives like proxy_remove_rule or proxy_enable_rule. While the context of sibling tools implies usage scenarios, the description itself lacks guidance on exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proxy_enable_ruleA
Enable a disabled interception rule.
| Name | Required | Description | Default |
|---|---|---|---|
| rule_id | Yes | Rule ID to enable |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It only states the basic action without disclosing behavioral traits (e.g., reversibility, idempotence, what happens if already enabled). This is minimal disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no superfluous words, achieving maximum conciseness while conveying the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter tool, the description is adequate but lacks contextual completeness. It does not mention that the rule must be disabled first, nor does it hint at the relationship with proxy_disable_rule.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter (rule_id) is already described in the input schema with 100% coverage. The description adds no additional meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action 'enable' and the resource 'a disabled interception rule', making the tool's purpose immediately obvious. It distinguishes well from siblings like proxy_disable_rule and proxy_update_rule.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage (enable a rule that is disabled) but provides no explicit context about when to use this tool versus alternatives. No mention of prerequisites or scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proxy_enable_server_tls_captureA
Toggle server-side JA3S capture. When enabled, outgoing TLS connections are intercepted to extract the server's negotiated TLS parameters.
| Name | Required | Description | Default |
|---|---|---|---|
| enabled | Yes | true to enable, false to disable |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden. It explains the effect (intercept outgoing TLS, extract negotiated parameters) but does not disclose potential side effects like performance impact or how captured data is stored/retrieved.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences that front-load the action and then describe the effect. No unnecessary words; every sentence is informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple toggle tool with one parameter, the description is nearly complete. It explains what capture does but could mention that extracted data is accessible via other proxy tools (e.g., proxy_get_tls_fingerprints). Minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a well-described boolean parameter. The description adds the concept of 'toggling' but no additional meaning beyond what the schema already provides. Baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses specific verb 'Toggle' and resource 'server-side JA3S capture', clearly distinguishing it from sibling tools like proxy_set_ja3_spoof. It states exactly what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context (enable to intercept TLS connections) but does not explicitly state when not to use it or mention alternatives. It provides clear context for when to toggle capture.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proxy_export_harC
Export a recorded session (or filtered subset) to HAR format.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | asc | |
| text | No | ||
| to_ts | No | ||
| method | No | ||
| from_ts | No | ||
| session_id | Yes | Session ID | |
| output_file | No | Output HAR file path | |
| status_code | No | ||
| url_contains | No | ||
| include_bodies | No | Include body text when available | |
| hostname_contains | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description does not disclose important behavioral traits like whether it overwrites existing files, file size limits, or side effects on the session. This leaves the agent uninformed about critical behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise at one sentence, but it is too terse given the complexity of the tool. It could benefit from a brief additional sentence on the filtering capability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the high parameter count and lack of output schema, the description is incomplete. It does not explain optional filters, output format details, or prerequisite steps, leaving gaps for the agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With schema description coverage at only 27%, the description should compensate but merely mentions 'filtered subset' without explaining any of the 11 parameters. It adds no value beyond what the minimal schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool exports a recorded session to HAR format. However, it does not explicitly differentiate from sibling tools like proxy_import_har beyond the direction (export vs import).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives, such as proxy_import_har or proxy_list_traffic. The description lacks context for decision-making.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proxy_get_ca_certA
Get the CA certificate PEM and SPKI fingerprint for installing on the target device.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | What to return: 'pem', 'fingerprint', or 'both' | both |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It describes a read operation ('Get'), which is transparent. But no mention of permissions, side effects, or error conditions, leaving some gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, no redundant words, front-loaded with action and resource. Perfectly concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter getter with no output schema, the description is complete: it tells what, why, and the format options are clear from schema. Siblings indicate it fits into proxy setup workflow.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers format parameter 100% with enum and default. Description does not add extra meaning beyond 'PEM and SPKI fingerprint'. Baseline 3 applies due to high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific verb 'get' and the resource 'CA certificate PEM and SPKI fingerprint', with clear purpose 'for installing on the target device'. This distinguishes it from sibling tools like proxy_set_* or proxy_start.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'for installing on the target device' provides usage context, indicating this is a setup step. However, no explicit guidance on when to use vs alternatives (e.g., proxy_check_fingerprint_runtime) is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proxy_get_exchangeB
Get full details of a captured HTTP exchange including headers and body previews.
| Name | Required | Description | Default |
|---|---|---|---|
| exchange_id | Yes | Exchange ID from proxy_list_traffic |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It only states the tool returns full details with headers and body previews, but omits behavioral traits like whether the tool is read-only, any size limits, or response truncation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, 12 words, front-loaded with key information. Every word contributes to the purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Adequate for a simple retrieval tool with one parameter, but lacks details on what 'full details' entails (e.g., whether body previews are truncated) and no output schema is provided. Gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with the parameter exchange_id described as 'Exchange ID from proxy_list_traffic'. Description adds 'full details' but no additional meaning beyond schema; baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the verb 'get', the resource 'details of a captured HTTP exchange', and what is included ('headers and body previews'), distinguishing it from sibling tools like proxy_list_traffic.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives. The prerequisite (exchange_id from proxy_list_traffic) is implied by the schema but not stated, and no when-not-to-use or exclusion criteria are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proxy_get_sessionB
Get manifest/details for a specific recorded session.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes | Session ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since no annotations are available, the description bears full responsibility for behavioral disclosure. It mentions a read operation ('Get') but provides no details about side effects, authentication requirements, rate limits, or other behavioral traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence with no filler. However, it could be slightly expanded to include usage hints without becoming verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (one parameter, no output schema), and the description adequately conveys its purpose. However, given the absence of an output schema, some indication of what the response contains would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema includes one parameter (session_id) with full description coverage (100%). The tool description adds no additional meaning beyond the schema, so a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves manifest or details for a specific recorded session, using a specific verb and resource. It distinguishes itself from siblings like proxy_list_sessions (which lists sessions) and proxy_get_session_exchange (which gets individual exchanges).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives such as proxy_get_exchange or proxy_get_session_handshakes. The description does not specify context, prerequisites, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proxy_get_session_exchangeB
Get one exchange from a recorded session by seq or exchange ID.
| Name | Required | Description | Default |
|---|---|---|---|
| seq | No | Sequence number in session | |
| session_id | Yes | Session ID | |
| exchange_id | No | Original exchange ID | |
| include_body | No | Include persisted full body data when available |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must fully disclose behavioral traits, but it only states 'get one exchange'. It does not indicate whether the operation is read-only (likely), what happens if the exchange is not found, or any side effects. The description adds no behavioral context beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence of 10 words that conveys the core purpose efficiently. It contains no unnecessary information and is front-loaded with the action and resource.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 4 parameters, no output schema, and no annotations, the description is minimally adequate. It explains the basic retrieval function but lacks context on what an 'exchange' is, how sessions work, or typical use cases. With full schema coverage, it meets the minimum but leaves gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds no additional meaning beyond the schema; it merely restates that identification is by seq or exchange ID, which is already evident from the parameter descriptions. No extra constraints or relationships are provided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves one exchange from a recorded session, specifying the identification methods (by seq or exchange ID). This verb+resource combination is specific and distinguishes it from sibling tools like proxy_get_exchange which likely operates without session context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. There is no mention of prerequisites, context, or exclusions. The description merely states what it does, leaving the agent to infer usage from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proxy_get_session_handshakesC
Summarize TLS handshake/fingerprint availability (JA3/JA4/JA3S) for session exchanges.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | desc | |
| limit | No | ||
| offset | No | ||
| session_id | Yes | Session ID | |
| url_contains | No | Filter by URL substring | |
| hostname_contains | No | Filter by hostname substring |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It does not disclose read-only nature, side effects, authentication needs, rate limits, or return format. The word 'summarize' hints at non-destructive behavior, but no details are given.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that front-loads the primary purpose. No wasted words, but it could be slightly more structured with additional details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 6 parameters, no output schema, and no annotations, the description is insufficient. It does not describe the output format or the meaning of the summary, leaving agents underinformed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 50%, leaving limit, offset, and sort undocumented. The description adds no parameter information, failing to compensate for the gap. It does not explain how these parameters affect the summary.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool summarizes TLS handshake/fingerprint availability (JA3/JA4/JA3S) for session exchanges, which distinguishes it from sibling tools like proxy_get_tls_fingerprints and proxy_get_session_exchange. However, it does not define 'availability' precisely.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. The description lacks prerequisites, use-case context, or exclusions. With no annotations, the description must provide this, but it does not.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proxy_get_tls_configA
Get current TLS capture and spoofing configuration.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It correctly indicates a read operation ('Get'), implying no side effects. No contradiction, but could add details like return format or prerequisites.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence that efficiently communicates the tool's purpose. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple getter tool with no parameters and no output schema, the description is adequate. It could be enriched with details about the returned configuration, but it is sufficient for an AI agent to understand the basic function.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has no parameters, so the schema fully covers them. The description adds no additional semantic detail, but none is needed. Baseline 4 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool gets the current TLS capture and spoofing configuration, with a specific verb and resource. It distinguishes from sibling tools that modify or manage proxies and TLS settings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes the purpose clear (retrieving config), providing implicit guidance for usage. However, it lacks explicit when-to-use or when-not-to-use instructions, and does not mention alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proxy_get_tls_fingerprintsA
Get JA3/JA4 client fingerprints and JA3S server fingerprint for a specific captured exchange.
| Name | Required | Description | Default |
|---|---|---|---|
| exchange_id | Yes | Exchange ID from proxy_list_traffic |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden of behavioral disclosure. However, it only states the function (get fingerprints) without mentioning any side effects, required permissions, or output details. For a read-only operation, this is minimal but could be improved by noting that it is non-destructive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that conveys the core functionality without any unnecessary words. It is front-loaded with the action and resource, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter, no output schema), the description is reasonably complete. However, it lacks information about the return format (e.g., object with fingerprint strings) or prerequisites (e.g., the exchange must exist). An output schema or brief note on output structure would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, with the parameter 'exchange_id' already described as 'Exchange ID from proxy_list_traffic'. The tool description does not add any further semantic meaning to the parameter beyond what the schema provides, so a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool's purpose: retrieving JA3, JA4, and JA3S fingerprints for a specific captured exchange. The verb 'Get' and the specific resource types (client and server fingerprints) differentiate it from sibling tools like proxy_list_tls_fingerprints (which lists all fingerprints) and proxy_list_traffic (which lists exchanges).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies that the tool should be used when you have a specific exchange_id from proxy_list_traffic, but it does not explicitly state when to use it versus alternatives. For example, it could clarify that proxy_list_tls_fingerprints might be used first to get an overview, or that this tool provides details for a single exchange. No exclusion criteria are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proxy_import_harA
Import a HAR file from disk into a new persisted session for querying, findings, and replay.
| Name | Required | Description | Default |
|---|---|---|---|
| strict | No | When true, abort on first invalid HAR entry; when false, skip invalid entries | |
| har_file | Yes | Path to HAR file on disk | |
| max_disk_mb | No | Session disk cap in MB | |
| storage_dir | No | Optional custom session storage directory | |
| session_name | No | Optional name for the imported session |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It lacks disclosure of behavioral traits such as whether existing sessions are overwritten, error handling for malformed HAR files (though 'strict' parameter hints at this in schema), or details about session persistence. For a mutation tool, more behavioral context is needed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that fronts the action and outcome, containing no unnecessary words. It is concise and structured efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (5 parameters, no output schema), the description provides the high-level purpose but lacks details about return values (e.g., session ID) and edge cases. It is adequate but not fully comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description does not add additional meaning beyond the schema; it does not elaborate on parameter nuances like session naming or storage directory behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (import), the resource (HAR file), and the destination (new persisted session). It also indicates the purpose (querying, findings, replay), distinguishing it from sibling tools like proxy_export_har or proxy_list_sessions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when a HAR file needs to be imported into a session, but does not provide explicit guidance on when to use this tool versus alternatives, nor when not to use it. No exclusions 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.
proxy_inject_headersA
Add or overwrite headers on matching traffic. Creates a passthrough rule with header transforms.
| Name | Required | Description | Default |
|---|---|---|---|
| headers | Yes | Headers to inject (key-value pairs, set value to null to delete a header) | |
| hostname | No | Hostname to match (optional) | |
| priority | No | Rule priority (default: 50) | |
| direction | No | Where to inject: request, response, or both | request |
| url_pattern | No | URL regex pattern to match (optional) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must cover behavioral traits. It discloses it's a passthrough rule with header transforms but omits side effects like rule activation timing, overwrite behavior, or permission requirements. Lacks full transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two succinct sentences, front-loaded with main purpose, no redundant words. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity and high schema coverage, the description captures the essence and differentiates from siblings. Lacks mention of return behavior but no output schema expected. Still sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so schema already documents all parameters. Description adds minimal extra context (e.g., 'passthrough rule'), which warrants a baseline 3. No significant additional explanation beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states verb 'Add or overwrite headers' and resource 'matching traffic', and specifies it creates a passthrough rule. This distinguishes it from sibling tools like proxy_add_rule or proxy_rewrite_url.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description implies usage for header injection on matching traffic but lacks explicit guidance on when to use this vs alternatives like proxy_add_rule with transforms. No when-not-to-use or prerequisites mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proxy_list_fingerprint_presetsA
List available browser fingerprint presets for use with proxy_set_fingerprint_spoof.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavioral traits. It only says 'list available', with no mention of side effects, permissions, or state changes. For a read-only listing tool, the absence of any explicit statement about non-destructiveness is a gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clean sentence with no extra words. It front-loads the action and purpose, making it highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless listing tool with no output schema, the description provides the basic purpose. However, it lacks details about what the output looks like (e.g., list of strings, objects) and any usage context, making it minimally adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has no parameters, so the baseline is 4. The description does not add further meaning, but since there are no parameters, no additional information is strictly needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List available browser fingerprint presets', specifying the verb 'list' and the resource 'browser fingerprint presets'. It also indicates the purpose 'for use with proxy_set_fingerprint_spoof', distinguishing it from sibling tools that set or check fingerprints.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description only hints at usage with proxy_set_fingerprint_spoof but does not provide explicit guidance on when to use this tool or when to avoid it. No alternatives are mentioned, and with many sibling tools, more context is needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proxy_list_rulesA
List all interception rules sorted by priority.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It states it lists all rules sorted by priority, implying a read-only operation. While it doesn't explicitly confirm no side effects, the verb 'list' strongly suggests safe behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence of 7 words that perfectly captures the tool's function with no superfluous information. It is front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity (no parameters, simple list operation), the description is complete. It covers what the tool does and the ordering. No output schema exists, but the behavior is straightforward enough that further detail is unnecessary.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema coverage is 100%. Per guidelines, baseline for 0 parameters is 4. The description adds no parameter information because none exist.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') and resource ('interception rules'), and clearly states the ordering by priority. This distinguishes it from sibling tools that add, remove, or modify rules.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implicitly indicates this tool is for reading rules, but does not provide explicit guidance on when to use it versus alternatives (e.g., proxy_get_session for sessions). No when-not-to-use or alternative mentions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proxy_list_sessionsA
List recorded sessions in storage.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It only states 'list recorded sessions' with no behavioral details such as whether the list includes metadata, supports pagination, or how sessions are ordered. Minimal disclosure beyond the core purpose.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
At six words, the description is highly concise and front-loaded. However, slightly more context about the nature of 'sessions' could improve understanding without bloating the text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of an output schema and the presence of many sibling session-related tools (e.g., 'proxy_list_traffic', 'proxy_get_session'), the description fails to explain what information is returned (e.g., session IDs, timestamps) or how this tool differs from similar listing tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters and schema coverage is 100% (empty schema). The description need not add parameter details, and the baseline for no parameters is 4. No param information is required.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'list' and the resource 'recorded sessions', making the purpose unambiguous. It also distinguishes from sibling tools like 'proxy_get_session' (individual session retrieval) and 'proxy_delete_session' (deletion).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies listing all sessions, but it does not provide explicit guidance on when to use this tool versus alternatives like 'proxy_query_session' or 'proxy_get_session'. No context about filtering or usage conditions is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proxy_list_tls_fingerprintsB
List unique client JA3/JA4 fingerprints across captured traffic with occurrence counts.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max fingerprints to return (default: 20) | |
| hostname_filter | No | Filter by hostname substring |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It does not state whether the operation is read-only, if it affects capture state, or what scope of traffic is considered (e.g., current session only). The agent cannot infer safety or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that is front-loaded with the core purpose. Every word adds value; no unnecessary information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the basic functionality adequately for a simple tool with 2 optional parameters and no output schema. However, it lacks context such as read-only nature or that it operates on the current capture session. Sibling tool count is high but not addressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with both parameters described. The description adds no additional parameter semantics beyond the schema, but it does mention 'occurrence counts' in the output, which is helpful. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'list' and the resource 'unique client JA3/JA4 fingerprints' with additional detail 'occurrence counts'. It distinguishes itself from sibling tools like proxy_get_tls_fingerprints (which likely returns specific details) and proxy_list_fingerprint_presets (presets vs captured traffic).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives (e.g., proxy_get_tls_fingerprints) nor mentions prerequisites like an active capture session. There is no explicit 'when not to use' or context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proxy_list_trafficB
List captured HTTP exchanges with optional filters. Returns paginated results.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max entries to return (default: 50) | |
| offset | No | Skip first N entries (default: 0) | |
| url_filter | No | Filter by URL substring | |
| method_filter | No | Filter by HTTP method (e.g., GET, POST) | |
| status_filter | No | Filter by response status code | |
| hostname_filter | No | Filter by hostname substring |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions 'Returns paginated results,' which is useful context about output behavior. However, it doesn't describe important aspects like whether this is a read-only operation, what permissions are required, rate limits, or what happens if no exchanges are captured. For a tool with no annotation coverage, this leaves significant gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with just two sentences: 'List captured HTTP exchanges with optional filters. Returns paginated results.' Every word earns its place—the first sentence states the core purpose, and the second adds critical behavioral context. It's front-loaded with the main action and wastes no space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (6 parameters, no output schema, no annotations), the description is minimally adequate. It covers the basic purpose and pagination behavior but lacks details on error conditions, output format, or integration with sibling tools. Without annotations or output schema, the agent must infer much from the parameter schema alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents all 6 parameters with clear descriptions. The description adds minimal value beyond the schema by mentioning 'optional filters' generically, but doesn't provide additional context about parameter interactions, default behaviors beyond the schema, or usage examples. This meets the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'List captured HTTP exchanges with optional filters.' This specifies the verb ('List'), resource ('captured HTTP exchanges'), and scope ('with optional filters'). However, it doesn't explicitly differentiate from sibling tools like 'proxy_search_traffic' or 'proxy_get_exchange', which appear related but have different functions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It mentions 'optional filters' but doesn't clarify when filtering is appropriate or when other tools like 'proxy_search_traffic' might be better suited. There's no mention of prerequisites, dependencies, or typical use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proxy_mock_responseC
Return a mock response for matched requests. Creates a mock rule.
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | Response body | |
| method | No | HTTP method to match (optional) | |
| status | Yes | Response status code | |
| hostname | No | Hostname to match (optional) | |
| priority | No | Rule priority (default: 10, high priority) | |
| url_pattern | No | URL regex pattern to match (optional) | |
| content_type | No | Content-Type header | application/json |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, and the description does not disclose side effects such as rule activation, overwriting behavior, or lifecycle. Minimal details beyond the basic action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with no waste. Could be slightly more structured (e.g., starting with the main action), but effective overall.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (7 parameters, no output schema, no annotations), the description is too sparse. Missing context about priority, rule matching behavior, and return values.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameters are already well-documented. The description adds no additional semantic value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it returns a mock response and creates a mock rule. It differentiates from sibling tools like proxy_add_rule, but could be more explicit about what 'mock rule' entails.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like proxy_add_rule or proxy_rewrite_url. The description lacks context for appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proxy_query_sessionA
Query indexed session exchanges by metadata (URL, hostname, method, status) with filters and pagination. Does NOT search body content — use proxy_search_session_bodies for that.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | desc | |
| text | No | Generic text filter | |
| limit | No | ||
| to_ts | No | Unix ms upper-bound timestamp | |
| method | No | HTTP method filter | |
| offset | No | ||
| from_ts | No | Unix ms lower-bound timestamp | |
| session_id | Yes | Session ID | |
| status_code | No | HTTP response status code filter | |
| url_contains | No | Filter by URL substring | |
| hostname_contains | No | Filter by hostname substring |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool is for querying and does not search body content, but lacks details on authentication, rate limits, or potential side effects. It is adequate but not thorough.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise—two sentences with no wasted words. The key purpose is front-loaded, and the critical limitation (no body search) is stated immediately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the core purpose and differentiates from a key sibling, but with 11 parameters and no output schema, it omits return value details (e.g., format, pagination metadata) that would help an agent fully understand the tool's behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is high (73%), so the baseline is 3. The description adds grouping of filters (URL, hostname, method, status) but does not provide additional meaning beyond what the schema already describes. Minor added value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool queries session exchanges by metadata with filters and pagination, and explicitly distinguishes from sibling proxy_search_session_bodies by stating it does not search body content. This provides a specific verb and resource, differentiating it from related tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells the agent when to use this tool vs proxy_search_session_bodies for body content search. However, it does not mention other possible alternatives or when not to use it, though the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proxy_remove_host_upstreamA
Remove a per-host upstream proxy override.
| Name | Required | Description | Default |
|---|---|---|---|
| hostname | Yes | Hostname to remove override for |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears full responsibility. It conveys that the tool performs a removal (destructive), but it does not detail side effects, confirmation prompts, or any dependencies. Minimal transparency beyond core action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that captures the tool's essence without any wasted words. It is front-loaded with the key action and resource.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one required parameter and no output schema, the description is complete. It tells the agent exactly what the tool does and what input it needs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (single parameter with description). The tool description adds no additional meaning beyond restating the parameter's purpose. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Remove' and the resource 'per-host upstream proxy override,' making it distinct from siblings like proxy_set_host_upstream (set) and proxy_clear_upstream (clear all).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly state when to use this tool versus alternatives, but the purpose is clear enough that an agent can infer it's for removing a specific host's override. 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.
proxy_remove_ruleC
Delete an interception rule.
| Name | Required | Description | Default |
|---|---|---|---|
| rule_id | Yes | Rule ID to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but only states 'Delete an interception rule.' It does not disclose that deletion is permanent, whether the rule must be disabled first, or any side effects. This is insufficient for an agent to understand the tool's behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, concise, and free of waste. However, it may be too brief to provide complete context, but for conciseness it is nearly optimal.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple tool with one parameter and no output schema, the description does not mention the result of deletion (e.g., success confirmation, effect on ongoing interceptions). It lacks completeness for an agent to fully understand the tool's behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with parameter 'rule_id' described as 'Rule ID to delete'. The tool description adds no additional semantic value; it simply restates the action. Baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Delete an interception rule' clearly states the verb 'Delete' and the resource 'interception rule'. It distinguishes from siblings like proxy_add_rule, proxy_disable_rule, and proxy_enable_rule by specifying a distinct action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives such as proxy_disable_rule. There is no mention of prerequisites, context, 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.
proxy_replay_sessionB
Replay selected requests from a recorded/imported session. Default mode is dry_run for safety.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | dry_run previews replay plan; execute sends the requests | dry_run |
| sort | No | desc | |
| text | No | Generic text filter | |
| limit | No | ||
| to_ts | No | Unix ms upper-bound timestamp | |
| method | No | HTTP method filter | |
| offset | No | ||
| from_ts | No | Unix ms lower-bound timestamp | |
| session_id | Yes | Session ID | |
| timeout_ms | No | Per-request timeout in milliseconds | |
| status_code | No | Response status code filter | |
| exchange_ids | No | Explicit exchange IDs to replay (overrides query filters) | |
| url_contains | No | Filter by URL substring | |
| target_base_url | No | Optional base URL override (keeps original path+query) | |
| hostname_contains | No | Filter by hostname substring |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It reveals that dry_run is safe and execute sends requests, but lacks details on permissions, reversibility, or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with core action (replay) and key default (dry_run). No extraneous words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite 15 parameters, the description is very brief. It does not explain what dry_run returns, how filters interact, or expected output format. Lacks completeness for a complex tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 80%, so the baseline is 3. The description adds no extra meaning to parameters beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (replay) and resource (requests from a session). It is distinct from sibling tools like proxy_export_har, but does not explicitly differentiate itself.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage with dry_run for safety, but offers no guidance on when to use this tool over alternatives like proxy_query_session or proxy_get_session_exchange.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proxy_rewrite_urlB
Rewrite request URLs matching a pattern. Creates a passthrough rule with body match-replace on the URL.
| Name | Required | Description | Default |
|---|---|---|---|
| hostname | No | Limit to this hostname | |
| priority | No | Rule priority (default: 50) | |
| replace_with | Yes | Replacement string | |
| match_pattern | Yes | Regex pattern to match in URLs |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits. It mentions creating a passthrough rule but omits side effects (e.g., rule priority interaction), permission requirements, or rate limits. The phrase 'body match-replace on the URL' is somewhat ambiguous.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, consisting of two clear sentences with no unnecessary information. Every word contributes to understanding the core function.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the absence of an output schema and the simplicity of the tool, the description is minimally adequate. However, it lacks details about return behavior, rule management implications, and edge cases, leaving gaps for a complete understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage with descriptions for all 4 parameters. The description adds no additional parameter information beyond the schema, so a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool rewrites request URLs using a pattern, specifying the mechanism ('creates a passthrough rule with body match-replace on the URL') and distinguishes it from sibling tools like proxy_add_rule.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives such as proxy_add_rule or proxy_mock_response. There is no mention of preferred contexts or exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proxy_search_session_bodiesA
Search inside HTTP request/response bodies stored in a persistent session. Decompresses and searches actual body content — useful for finding specific text, prices, API responses, error messages, etc. in recorded traffic. Returns context snippets around each match (like grep -C).
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Text to search for inside request/response bodies | |
| limit | No | Max matching exchanges to return (default: 10, max: 100) | |
| method | No | Pre-filter: HTTP method | |
| max_scan | No | Max bodies to decompress and search (default: 200, max: 5000) | |
| search_in | No | Which bodies to search (default: both) | both |
| session_id | Yes | Session ID | |
| status_code | No | Pre-filter: HTTP status code | |
| url_contains | No | Pre-filter: URL substring | |
| context_chars | No | Characters of context around each match (default: 120) | |
| case_sensitive | No | Case-sensitive search (default: false) | |
| hostname_contains | No | Pre-filter: hostname substring | |
| content_type_contains | No | Pre-filter: response content-type substring (e.g. 'html', 'json') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries full burden. It discloses that the tool decompresses bodies, searches actual content, and returns context snippets like grep -C. This provides sufficient behavioral insight, though it does not cover error handling or performance.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core purpose and brief elaboration. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description explains the core functionality and return format (context snippets). It does not document output schema, but given the complexity of 12 parameters, it covers the essentials well.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with clear parameter descriptions. The tool description adds context (decompression, grep-like output) but does not significantly enhance individual parameter understanding beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches inside HTTP request/response bodies stored in a session. It specifies that it decompresses and searches actual body content, and lists use cases like finding text, prices, API responses. This distinguishes it from sibling tools like proxy_search_traffic.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use the tool (searching recorded traffic for specific text) and gives examples. However, it does not explicitly state when not to use it or mention alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proxy_search_trafficA
Full-text search across URLs, headers, and body previews of captured traffic.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results (default: 20) | |
| query | Yes | Search string |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that the search covers URLs, headers, and body previews, implying partial content. However, it omits details like rate limits, result format, or behavior on empty results, which limits transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that conveys the core functionality efficiently. No extraneous information, making it highly concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (2 parameters, no output schema) and the absence of annotations, the description is minimally complete. It identifies what is searched but does not describe return format or pagination, which might be needed for complex use cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with both parameters having descriptions. The tool's description adds context about searching across specific traffic components, which supplements the schema. However, it does not provide deeper semantics beyond the schema's basic explanations.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool performs full-text search across URLs, headers, and body previews of captured traffic. It uses a specific verb and resource, and distinguishes itself from sibling tools like proxy_list_traffic (listing all) and proxy_search_session_bodies (more specific session search).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives like proxy_search_session_bodies or proxy_list_traffic. The description implies it is for general search, but does not mention exclusions or context, leaving the agent without clear direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proxy_session_recoverA
Rebuild session indexes from records after crash/corruption.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | No | Recover only this session (default: recover all sessions) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It implies a repair operation but does not disclose potential side effects (e.g., overwriting indexes) or whether it requires specific permissions. The description is adequate but could be more transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that conveys the purpose and context without any wasted words. It is concise and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple recovery tool with one optional parameter and no output schema, the description provides enough context to understand its purpose and trigger. However, it could briefly explain what 'rebuild session indexes' entails for completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% as the single parameter 'session_id' is well-documented in the input schema. The tool description does not add additional parameter semantics beyond what the schema provides, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Rebuild' with clear resource 'session indexes' and context 'after crash/corruption'. It clearly distinguishes from sibling tools like proxy_session_start and proxy_session_stop, which manage sessions rather than recover their indexes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states the trigger condition ('after crash/corruption'), providing clear guidance on when to use. However, it doesn't mention when not to use or alternatives, though the context is sufficiently specific.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proxy_session_startB
Start persistent on-disk capture for the current proxy run.
| Name | Required | Description | Default |
|---|---|---|---|
| max_disk_mb | No | Session disk cap in MB | |
| storage_dir | No | Custom storage directory | |
| session_name | No | Optional session name | |
| capture_profile | No | preview=body previews only, full=full request/response bodies | preview |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, and the description does not disclose behavioral traits like whether it overwrites existing captures, if it requires authentication, or side effects. 'Persistent' is vague.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, which is concise but may be too brief, lacking critical information. It is not verbose, but could be more informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 4 parameters, no annotations, and no output schema, the description is insufficient. It does not explain what 'persistent' means, how to stop the session, or what the return value is.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds no parameter context beyond schema descriptions, but that is acceptable given full coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool starts a persistent on-disk capture for the current proxy run, using a specific verb and resource. It distinguishes from sibling tools like proxy_session_stop and proxy_session_status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. It does not mention prerequisites, when not to use, or that a session must be stopped with proxy_session_stop.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proxy_session_statusA
Get current persistent capture runtime status.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It adequately implies a read operation ('Get'), but lacks explicit statements about safety, side effects, or requirements (e.g., active session). The simplicity of a zero-parameter status tool makes this acceptable but not exemplary.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is extremely concise at 6 words, single sentence, and front-loaded with the core action. Every word is necessary and no surplus content exists.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters, no output schema, and no annotations, the description is mostly complete. However, the term 'persistent capture' may need clarification for new users, but overall it covers the essential purpose.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist in the input schema (100% coverage). According to guidelines, baseline is 4. The description adds no parameter info, but none is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Get current persistent capture runtime status' with a specific verb and resource. It distinguishes from siblings like proxy_status and proxy_transparent_status by specifying 'persistent capture runtime', making its purpose unique.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No usage guidelines are provided. The description does not indicate when to use this tool over alternative status tools, such as proxy_status or proxy_session_status, nor does it mention any prerequisites or context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proxy_session_stopA
Stop persistent on-disk capture and finalize the active session.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It states stop and finalize but does not disclose side effects (e.g., whether captured data is saved), prerequisites, or destructive nature. This is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. It efficiently conveys the core action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters and no output schema, the description is minimal but adequate for a simple stop command. However, it lacks details on the post-stop state and return value, leaving some uncertainty.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters with 100% schema description coverage, so the description need not add parameter info. The baseline of 4 applies, and no additional detail is required.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool stops persistent on-disk capture and finalizes the active session. It uses a specific verb (stop) and resource (proxy session), and it distinguishes from siblings like proxy_session_start and proxy_session_status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for stopping a session but provides no explicit guidance on when to use this tool versus alternatives, or any prerequisites. It is adequate but lacks directive context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proxy_set_fingerprint_spoofA
Enable outgoing TLS + HTTP/2 fingerprint spoofing via impit (native TLS impersonation, no Docker required). Supports browser presets that select an impit target (rustls, matching real Chrome/Firefox).
| Name | Required | Description | Default |
|---|---|---|---|
| preset | No | Browser preset name (e.g. 'chrome_131', 'chrome_136'). Use proxy_list_fingerprint_presets to see available options. | |
| user_agent | No | User-Agent header to use with spoofed requests (overrides preset UA) | |
| host_patterns | No | Only spoof requests to hostnames containing these substrings. Empty = spoof all HTTPS. | |
| disable_redirect | No | Disable automatic redirect following | |
| insecure_skip_verify | No | Skip TLS certificate verification |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It mentions native TLS impersonation and no Docker requirement, but does not disclose side effects, whether previous spoofing settings are overwritten, or any other behavioral implications beyond enabling spoofing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is exceptionally concise at two sentences, with no redundant information. Every phrase adds value, and it is front-loaded with the core functionality.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (5 parameters, no output schema, no annotations) and the presence of many sibling proxy tools, the description provides adequate but not complete context. It does not mention return values, prerequisites (e.g., proxy must be running), or typical use cases, which could aid correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds minimal value beyond the schema, merely restating that browser presets are supported. The schema already explains each parameter adequately, so the description does not enrich parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool enables TLS and HTTP/2 fingerprint spoofing via impit, with browser presets. It specifies the resource (fingerprint spoofing) and verb (enable), and distinguishes from siblings like proxy_set_ja3_spoof by mentioning HTTP/2 support.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for spoofing fingerprints but does not provide explicit when-to-use or when-not-to-use guidance. It references proxy_list_fingerprint_presets in the schema but fails to differentiate from alternative spoofing tools like proxy_set_ja3_spoof or prerequisites such as a running proxy.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proxy_set_host_upstreamA
Set a per-host upstream proxy override. Traffic to this hostname will use the specified proxy instead of the global one.
| Name | Required | Description | Default |
|---|---|---|---|
| hostname | Yes | Hostname to override (e.g., api.example.com) | |
| no_proxy | No | Hostnames to bypass this proxy | |
| proxy_url | Yes | Upstream proxy URL for this host. If it has a username but no password, the password is filled in from PROXY_MCP_UPSTREAM_PASSWORD, but only when PROXY_MCP_UPSTREAM_HOST is also set and matches this URL's hostname. The response reports passwordSource: env | url | none. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It discloses the core effect—traffic to the hostname uses the specified proxy instead of the global one—but omits details about persistence, idempotency, precedence over existing overrides, or the revert path.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences front-load the action and effect with no wasted words. The description is efficient and immediately understandable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
As a simple setter, the description captures the essential behavior, but the absence of annotations and output schema leaves gaps: whether an existing override is replaced, whether the setting persists, and how to undo it are not addressed. The no_proxy parameter's behavioral role is also left to inference from the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all parameters are already documented in the schema. The description adds only the per-host context for hostname and does not elaborate on no_proxy or proxy_url semantics beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Set') and a precise resource ('per-host upstream proxy override'), immediately distinguishing it from global proxy configuration. The second sentence reinforces the scope by contrasting the per-host behavior with the global one.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly communicates when to use this tool: when a specific hostname should bypass the global upstream proxy. However, it does not explicitly name sibling alternatives such as proxy_set_upstream or proxy_remove_host_upstream, nor does it provide explicit when-not-to-use criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proxy_set_ja3_spoofA
Legacy: enable fingerprint spoofing (deprecated, use proxy_set_fingerprint_spoof with a preset). The ja3 parameter is accepted but ignored — the default Chrome preset is used.
| Name | Required | Description | Default |
|---|---|---|---|
| ja3 | Yes | JA3 fingerprint string (ignored — use proxy_set_fingerprint_spoof with a preset instead) | |
| user_agent | No | User-Agent header to use with spoofed requests | |
| host_patterns | No | Only spoof requests to hostnames containing these substrings. Empty = spoof all HTTPS. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It reveals that the ja3 parameter is ignored and that the default Chrome preset is used. This is key behavioral info. However, it does not disclose whether the spoofing applies immediately or requires a restart, which would be helpful but not critical for a legacy tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero waste. Every word earns its place. Front-loaded with 'Legacy' and deprecation, then the key behavioral note.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a legacy tool with no output schema and clear deprecation, the description covers what it does, what to use instead, and the ignored parameter. It doesn't explain the effect on traffic or session state, but given its deprecated status, this is minimally sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value by noting that the ja3 parameter is ignored and that the default Chrome preset is used, which goes beyond the schema's description ('ignored') by specifying the default behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it enables fingerprint spoofing, marks itself as legacy, and directly names the replacement tool. The verb 'enable' and resource 'fingerprint spoofing' are specific, and it distinguishes from the sibling proxy_set_fingerprint_spoof.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says it's deprecated and instructs to use proxy_set_fingerprint_spoof instead. Also clarifies that the ja3 parameter is ignored, so agents know not to rely on it. Provides both when-not and alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proxy_set_upstreamB
Set a global upstream proxy for all outgoing traffic. Supports socks4://, socks5://, http://, https://, and pac+http:// URLs.
| Name | Required | Description | Default |
|---|---|---|---|
| no_proxy | No | Hostnames to bypass the upstream proxy | |
| proxy_url | Yes | Upstream proxy URL (e.g., socks5://user:pass@host:port). If the URL has a username but no password, and the server has both PROXY_MCP_UPSTREAM_PASSWORD and PROXY_MCP_UPSTREAM_HOST set with the host matching this URL's hostname, the password is filled in from the environment so it need not appear in this call. Otherwise the URL is used as given; the response reports passwordSource: env | url | none. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral disclosure burden. It says the proxy applies to all outgoing traffic and lists supported schemes, but does not disclose persistence, immediate effect, authentication expectations, or interaction with existing per-host proxy rules.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One compact, front-loaded sentence states the action, scope, and accepted schemes without filler. Every part contributes to deciding whether and how to invoke the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Together with the rich parameter schema, the description is sufficient to construct a valid call for a global proxy. However, for a mutating tool with no output schema and no annotations, the missing side-effect and alternative-routing context leaves noticeable gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents both parameters thoroughly (100% coverage), so the baseline is 3. The description adds value by enumerating the accepted URL schemes (socks4://, socks5://, http://, https://, pac+http://), which goes beyond the schema's single example.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (set), the resource (global upstream proxy), and the scope (all outgoing traffic), plus the supported URL schemes. It is specific enough to stand apart from host-specific siblings like proxy_set_host_upstream, though it never explicitly contrasts itself with them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'global upstream proxy for all outgoing traffic' implies when this tool is appropriate and hints that it is not a per-host setting. However, there is no explicit when-not guidance or mention of alternatives such as proxy_set_host_upstream or proxy_clear_upstream.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proxy_startA
Start the HTTPS MITM proxy. Auto-generates a CA certificate. Returns port, URL, cert fingerprint, and setup instructions for the target device.
| Name | Required | Description | Default |
|---|---|---|---|
| port | No | Port to listen on (0 = random available port) | |
| max_disk_mb | No | Per-session disk cap in MB (writes are dropped once exceeded) | |
| storage_dir | No | Custom session storage directory | |
| session_name | No | Optional name for the session when persistence is enabled | |
| capture_profile | No | Capture profile for persisted sessions: preview (body previews) or full (full bodies) | preview |
| persistence_enabled | No | Enable persistent on-disk session capture (default: false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears full burden. It mentions auto-generation of CA certificate and returns outputs but omits important behavioral traits: that the proxy runs until stopped, potential network interception, need for target device setup, or cleanup of temporary certificates. The disclosure is partial.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one efficient sentence that immediately states the action and lists the returned items. No redundant words; well front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool starts a long-running proxy with 6 parameters, no output schema, and many sibling tools (e.g., proxy_stop, proxy_start_transparent), the description lacks lifecycle context (how to stop, relationship to transparent mode) and does not clarify that a target device must be configured. Adequate for basic use but incomplete for nuanced decision-making.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 100% description coverage, so baseline is 3. The description does not add extra meaning beyond the schema for any parameter. For example, it doesn't explain how 'capture_profile' or 'max_disk_mb' affect behavior beyond what schema says.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool starts an HTTPS MITM proxy with auto-generated CA certificate and lists key outputs (port, URL, cert fingerprint, setup instructions). It distinguishes from sibling tools like proxy_start_transparent by focusing on the standard proxy mode.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use when starting a standard MITM proxy but provides no explicit guidance on when to use it vs alternatives like proxy_start_transparent, nor any when-not-to-use conditions. No alternatives are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proxy_statusA
Get proxy running state, port, upstream config, rule count, and traffic count.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description must disclose behavioral traits. It describes a read-only operation and lists the information returned, which is adequate. However, it does not mention any side effects, authentication needs, or limitations beyond stating that it 'gets' data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence of 13 words that directly states the tool's purpose and output without any superfluous information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description lists the main fields returned (state, port, upstream config, rule count, traffic count), which is fairly complete. However, it lacks detail about the format or structure of the output.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has no parameters, and schema coverage is 100%. The description adds value by naming the fields returned, but baseline is 3 given the trivial parameter set.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and the resource 'proxy status', and lists the specific pieces of information returned: running state, port, upstream config, rule count, and traffic count. This distinguishes it from sibling tools that perform actions like start/stop or add rules.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. It merely describes what it does without any context about usage scenarios 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.
proxy_stopA
Stop the MITM proxy. Traffic history and CA certificate are retained. Interceptor targets (browsers, containers, spawned processes) activated by THIS MCP session are deactivated; targets belonging to other MCP sessions keep running, though the proxy they were pointed at is gone until someone calls proxy_start again. Pass all=true to deactivate every session's targets (the pre-3.5.3, process-wide behaviour). Over stdio there is one session, so every target is deactivated either way.
| Name | Required | Description | Default |
|---|---|---|---|
| all | No | Deactivate every session's interceptor targets, not just this session's (default: false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden and succeeds. It discloses what is retained, what is deactivated, how other sessions' targets behave after the proxy stops, and the subtle all=true process-wide behavior. This is unusually transparent for a stop operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no wasted words: the first states the core action and retained state, the second explains session-scoped behavior, and the third resolves the stdio edge case. Information is front-loaded and every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-optional-parameter stop operation, the description covers purpose, side effects, cross-session semantics, and the all flag's historical behavior. No output schema is needed to understand what will happen, and nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100% with a default and description for 'all,' but the tool description adds crucial meaning: all=true is the pre-3.5.3 process-wide behavior, and under stdio the flag is effectively irrelevant because there is only one session. This is genuinely useful semantic enrichment beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Starts with a clear imperative, 'Stop the MITM proxy,' and immediately specifies the operation's scope through its side effects: traffic history and CA certificate are retained, and interceptor targets are deactivated. The session-based behavior distinguishes it from proxy_start and interceptor_deactivate_all, so an agent can predict exactly what this tool does and does not do.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear operational context: when to pass all=true, how session ownership affects which targets are deactivated, and the stdio single-session simplification. It does not explicitly name alternatives or say 'use this instead of X,' but the context is strong enough for correct invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proxy_test_rule_matchA
Test which interception rules would match a request, with detailed per-field pass/fail diagnostics and effective winner by priority.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | simulate: test a synthetic request, exchange: test an existing captured exchange | simulate |
| request | No | Synthetic request (required when mode=simulate) | |
| exchange_id | No | Exchange ID from proxy_list_traffic (required when mode=exchange) | |
| limit_rules | No | Optional limit on number of priority-sorted rules evaluated | |
| include_disabled | No | Include disabled rules in diagnostics (default: true); disabled rules never win |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must convey behavioral traits. It explains the diagnostic output but does not explicitly confirm that the tool is read-only or has no side effects. The absence of any warning or side-effect disclosure reduces transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence with no redundant words. It efficiently conveys purpose and output.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the 5 parameters, nested object, lack of output schema, and no annotations, the description covers the core functionality well. It mentions diagnostics and winner, but could briefly summarize the two modes (simulate vs exchange) for completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (all 5 parameters have descriptions). The tool description adds no additional parameter meaning beyond summarizing the overall behavior. Baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Test' and the resource 'interception rules', and specifies the output of 'detailed per-field pass/fail diagnostics and effective winner by priority'. This distinguishes it from sibling tools that list or modify rules.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies a diagnostic use case but does not explicitly state when to use this tool versus alternatives like proxy_list_rules or proxy_update_rule. No exclusions or alternative references are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proxy_update_ruleC
Modify an existing interception rule.
| Name | Required | Description | Default |
|---|---|---|---|
| handler | No | New handler config | |
| matcher | No | New matcher config | |
| rule_id | Yes | Rule ID to update | |
| priority | No | New priority | |
| description | No | New description |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must disclose behavior. Fails to clarify if update is partial or full replacement, what happens on invalid rule_id, or whether changes take effect immediately. Lacks side-effect details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
At 4 words, the description is too brief for a tool with 5 parameters including nested objects. It sacrifices clarity for brevity; should at least mention updatable fields or behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema and no return value description. Missing guidance on success/failure signals, error conditions, or what the tool returns. Incomplete for a mutation tool in a complex domain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema covers 100% of parameters with descriptions, so baseline is 3. Description adds no additional meaning beyond the schema; it does not explain partial update semantics or required fields beyond rule_id.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description 'Modify an existing interception rule' uses a specific verb (modify) and resource (existing interception rule), clearly distinguishing from siblings like proxy_add_rule (create), proxy_remove_rule (delete), and proxy_enable_rule/proxy_disable_rule.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs alternatives. Does not mention that proxy_add_rule should be used for new rules or proxy_remove_rule for deletion. Lacks context on prerequisites or best practices.
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.
39 tool updates
v3.5.3- Changed
humanizer_click1 field changed- changed
Input schema / properties / target_id / descriptionPrevious value: -"Target ID from interceptor_browser_launch or interceptor_camoufox_launch"New value: +"Target ID from interceptor_browser_launch"
- Changed
humanizer_idle1 field changed- changed
Input schema / properties / target_id / descriptionPrevious value: -"Target ID from interceptor_browser_launch or interceptor_camoufox_launch"New value: +"Target ID from interceptor_browser_launch"
- Changed
humanizer_move1 field changed- changed
Input schema / properties / target_id / descriptionPrevious value: -"Target ID from interceptor_browser_launch or interceptor_camoufox_launch"New value: +"Target ID from interceptor_browser_launch"
- Changed
humanizer_scroll1 field changed- changed
Input schema / properties / target_id / descriptionPrevious value: -"Target ID from interceptor_browser_launch or interceptor_camoufox_launch"New value: +"Target ID from interceptor_browser_launch"
- Changed
humanizer_type1 field changed- changed
Input schema / properties / target_id / descriptionPrevious value: -"Target ID from interceptor_browser_launch or interceptor_camoufox_launch"New value: +"Target ID from interceptor_browser_launch"
- Removed
interceptor_android_activate - Removed
interceptor_android_deactivate - Removed
interceptor_android_devices - Removed
interceptor_android_setup - Changed
interceptor_browser_add_script_tag1 field changed- changed
Input schema / properties / target_id / descriptionPrevious value: -"Target ID from interceptor_browser_launch or interceptor_camoufox_launch"New value: +"Target ID from interceptor_browser_launch"
- Changed
interceptor_browser_close1 field changed- changed
Input schema / properties / target_id / descriptionPrevious value: -"Target ID from interceptor_browser_launch or interceptor_camoufox_launch"New value: +"Target ID from interceptor_browser_launch"
- Changed
interceptor_browser_evaluate3 fields changed- changed
Input schema / properties / target_id / descriptionPrevious value: -"Target ID from interceptor_browser_launch or interceptor_camoufox_launch"New value: +"Target ID from interceptor_browser_launch" - changed
Input schema / properties / value_max_chars / descriptionPrevious value: -"Max characters of the JSON-stringified return value (default: 20000)."New value: +"Max characters of the JSON-stringified return value (default: 20000, max 16000000)." - removed
Input schema / properties / worldRemoved value: -{ - "default": "isolated", - "description": "`isolated` (default) or `main`. On current camoufox build (cloverlabs/FF150) both run in the page's main world — arg is accepted but has no observable effect.", - "enum": [ - "isolated", - "main" - ], - "type": "string" -}
- Changed
interceptor_browser_get_cookie1 field changed- changed
Input schema / properties / target_id / descriptionPrevious value: -"Target ID from interceptor_browser_launch or interceptor_camoufox_launch"New value: +"Target ID from interceptor_browser_launch"
- Changed
interceptor_browser_get_network_field1 field changed- changed
Input schema / properties / target_id / descriptionPrevious value: -"Target ID from interceptor_browser_launch or interceptor_camoufox_launch"New value: +"Target ID from interceptor_browser_launch"
- Changed
interceptor_browser_get_storage_value1 field changed- changed
Input schema / properties / target_id / descriptionPrevious value: -"Target ID from interceptor_browser_launch or interceptor_camoufox_launch"New value: +"Target ID from interceptor_browser_launch"
- Changed
interceptor_browser_inject_init_script1 field changed- changed
Input schema / properties / target_id / descriptionPrevious value: -"Target ID from interceptor_browser_launch or interceptor_camoufox_launch"New value: +"Target ID from interceptor_browser_launch"
- Changed
interceptor_browser_list_console1 field changed- changed
Input schema / properties / target_id / descriptionPrevious value: -"Target ID from interceptor_browser_launch or interceptor_camoufox_launch"New value: +"Target ID from interceptor_browser_launch"
- Changed
interceptor_browser_list_cookies1 field changed- changed
Input schema / properties / target_id / descriptionPrevious value: -"Target ID from interceptor_browser_launch or interceptor_camoufox_launch"New value: +"Target ID from interceptor_browser_launch"
- Changed
interceptor_browser_list_network_fields1 field changed- changed
Input schema / properties / target_id / descriptionPrevious value: -"Target ID from interceptor_browser_launch or interceptor_camoufox_launch"New value: +"Target ID from interceptor_browser_launch"
- Changed
interceptor_browser_list_storage_keys1 field changed- changed
Input schema / properties / target_id / descriptionPrevious value: -"Target ID from interceptor_browser_launch or interceptor_camoufox_launch"New value: +"Target ID from interceptor_browser_launch"
- Changed
interceptor_browser_navigate1 field changed- changed
Input schema / properties / target_id / descriptionPrevious value: -"Target ID from interceptor_browser_launch or interceptor_camoufox_launch"New value: +"Target ID from interceptor_browser_launch"
- Changed
interceptor_browser_screenshot1 field changed- changed
Input schema / properties / target_id / descriptionPrevious value: -"Target ID from interceptor_browser_launch or interceptor_camoufox_launch"New value: +"Target ID from interceptor_browser_launch"
- Changed
interceptor_browser_snapshot1 field changed- changed
Input schema / properties / target_id / descriptionPrevious value: -"Target ID from interceptor_browser_launch or interceptor_camoufox_launch"New value: +"Target ID from interceptor_browser_launch"
- Removed
interceptor_camoufox_close - Removed
interceptor_camoufox_info - Removed
interceptor_camoufox_launch - Removed
interceptor_camoufox_list - Removed
interceptor_frida_apps - Removed
interceptor_frida_attach - Removed
interceptor_frida_detach - Changed
interceptor_status1 field changed- changed
Input schema / properties / interceptor_id / descriptionPrevious value: -"Interceptor ID (e.g., 'browser', 'terminal', 'android-adb', 'android-frida', 'docker')"New value: +"Interceptor ID (e.g., 'browser', 'terminal', 'docker')"
- Changed
proxy_list_traffic1 field changed- removed
Input schema / properties / source_filterRemoved value: -{ - "description": "Filter by traffic source: 'explicit' (proxy-configured) or 'transparent' (iptables-redirected)", - "enum": [ - "explicit", - "transparent" - ], - "type": "string" -}
- Removed
proxy_mobile_detect_iface - Removed
proxy_mobile_setup - Removed
proxy_mobile_teardown - Removed
proxy_start_transparent - Changed
proxy_stop2 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / allAdded value: +{ + "default": false, + "description": "Deactivate every session's interceptor targets, not just this session's (default: false)", + "type": "boolean" +}
- Removed
proxy_stop_transparent - Removed
proxy_transparent_status
3 tool updates
v3.4.0- Changed
proxy_mobile_setup1 field changed- changed
Input schema / properties / upstream_proxy_url / descriptionPrevious value: -"Optional upstream proxy URL (socks5://user:pass@host:port or http://...). Sets the global upstream for BOTH listeners."New value: +"Optional upstream proxy URL (socks5://user:pass@host:port or http://...). Sets the global upstream for BOTH listeners. If it has a username but no password, the password is filled in from PROXY_MCP_UPSTREAM_PASSWORD, but only when PROXY_MCP_UPSTREAM_HOST is also set and matches this URL's hostname. The response reports password_source: env | url | none."
- Changed
proxy_set_host_upstream1 field changed- changed
Input schema / properties / proxy_url / descriptionPrevious value: -"Upstream proxy URL for this host"New value: +"Upstream proxy URL for this host. If it has a username but no password, the password is filled in from PROXY_MCP_UPSTREAM_PASSWORD, but only when PROXY_MCP_UPSTREAM_HOST is also set and matches this URL's hostname. The response reports passwordSource: env | url | none."
- Changed
proxy_set_upstream1 field changed- changed
Input schema / properties / proxy_url / descriptionPrevious value: -"Upstream proxy URL (e.g., socks5://user:pass@host:port)"New value: +"Upstream proxy URL (e.g., socks5://user:pass@host:port). If the URL has a username but no password, and the server has both PROXY_MCP_UPSTREAM_PASSWORD and PROXY_MCP_UPSTREAM_HOST set with the host matching this URL's hostname, the password is filled in from the environment so it need not appear in this call. Otherwise the URL is used as given; the response reports passwordSource: env | url | none."
6 tool updates
v3.3.2- Changed
humanizer_click1 field changed- changed
Input schema / properties / target_id / descriptionPrevious value: -"Browser target ID from interceptor_browser_launch"New value: +"Target ID from interceptor_browser_launch or interceptor_camoufox_launch"
- Changed
humanizer_idle1 field changed- changed
Input schema / properties / target_id / descriptionPrevious value: -"Browser target ID from interceptor_browser_launch"New value: +"Target ID from interceptor_browser_launch or interceptor_camoufox_launch"
- Changed
humanizer_move1 field changed- changed
Input schema / properties / target_id / descriptionPrevious value: -"Browser target ID from interceptor_browser_launch"New value: +"Target ID from interceptor_browser_launch or interceptor_camoufox_launch"
- Changed
humanizer_scroll1 field changed- changed
Input schema / properties / target_id / descriptionPrevious value: -"Browser target ID from interceptor_browser_launch"New value: +"Target ID from interceptor_browser_launch or interceptor_camoufox_launch"
- Changed
humanizer_type2 fields changed- changed
Input schema / properties / delay_ms / descriptionPrevious value: -"Extra delay per character in ms. Omit to let cloakbrowser pick its own humanized cadence."New value: +"Optional Playwright delay per character in ms." - changed
Input schema / properties / target_id / descriptionPrevious value: -"Browser target ID from interceptor_browser_launch"New value: +"Target ID from interceptor_browser_launch or interceptor_camoufox_launch"
- Changed
interceptor_camoufox_launch2 fields changed- changed
Input schema / properties / main_world_eval / descriptionPrevious value: -"Allow `mw:`-prefixed evaluate() calls in the main world"New value: +"Allow explicit `world: 'main'` evaluate calls. On cloverlabs/FF150 this gates the call but does not create a separate realm." - changed
Input schema / properties / os / descriptionPrevious value: -"Fingerprint OS to emulate (defaults to camoufox random)"New value: +"Fingerprint OS to emulate (default: host OS; pass an array to let Camoufox choose from those OS families)"
10 tool updates
v3.3.1- Changed
interceptor_browser_get_cookie1 field changed- changed
Input schema / properties / target_id / descriptionPrevious value: -"Target ID from interceptor_browser_launch"New value: +"Target ID from interceptor_browser_launch or interceptor_camoufox_launch"
- Changed
interceptor_browser_get_network_field1 field changed- changed
Input schema / properties / target_id / descriptionPrevious value: -"Target ID from interceptor_browser_launch"New value: +"Target ID from interceptor_browser_launch or interceptor_camoufox_launch"
- Changed
interceptor_browser_get_storage_value1 field changed- changed
Input schema / properties / target_id / descriptionPrevious value: -"Target ID from interceptor_browser_launch"New value: +"Target ID from interceptor_browser_launch or interceptor_camoufox_launch"
- Changed
interceptor_browser_list_console1 field changed- changed
Input schema / properties / target_id / descriptionPrevious value: -"Target ID from interceptor_browser_launch"New value: +"Target ID from interceptor_browser_launch or interceptor_camoufox_launch"
- Changed
interceptor_browser_list_cookies1 field changed- changed
Input schema / properties / target_id / descriptionPrevious value: -"Target ID from interceptor_browser_launch"New value: +"Target ID from interceptor_browser_launch or interceptor_camoufox_launch"
- Changed
interceptor_browser_list_network_fields1 field changed- changed
Input schema / properties / target_id / descriptionPrevious value: -"Target ID from interceptor_browser_launch"New value: +"Target ID from interceptor_browser_launch or interceptor_camoufox_launch"
- Changed
interceptor_browser_list_storage_keys1 field changed- changed
Input schema / properties / target_id / descriptionPrevious value: -"Target ID from interceptor_browser_launch"New value: +"Target ID from interceptor_browser_launch or interceptor_camoufox_launch"
- Changed
interceptor_browser_navigate1 field changed- changed
Input schema / properties / target_id / descriptionPrevious value: -"Target ID from interceptor_browser_launch"New value: +"Target ID from interceptor_browser_launch or interceptor_camoufox_launch"
- Changed
interceptor_browser_screenshot1 field changed- changed
Input schema / properties / target_id / descriptionPrevious value: -"Target ID from interceptor_browser_launch"New value: +"Target ID from interceptor_browser_launch or interceptor_camoufox_launch"
- Changed
interceptor_browser_snapshot1 field changed- changed
Input schema / properties / target_id / descriptionPrevious value: -"Target ID from interceptor_browser_launch"New value: +"Target ID from interceptor_browser_launch or interceptor_camoufox_launch"
1 tool update
v3.3.0- Changed
interceptor_browser_evaluate1 field changed- changed
Input schema / properties / world / descriptionPrevious value: -"`isolated` (default) or `main`. Main world only works on camoufox with `main_world_eval: true`."New value: +"`isolated` (default) or `main`. On current camoufox build (cloverlabs/FF150) both run in the page's main world — arg is accepted but has no observable effect."
3 tool updates
v3.2.0- Added
interceptor_browser_add_script_tag - Added
interceptor_browser_evaluate - Added
interceptor_browser_inject_init_script
5 tool updates
v3.1.0- Changed
interceptor_browser_close1 field changed- changed
Input schema / properties / target_id / descriptionPrevious value: -"Target ID from interceptor_browser_launch"New value: +"Target ID from interceptor_browser_launch or interceptor_camoufox_launch"
- Added
interceptor_camoufox_close - Added
interceptor_camoufox_info - Added
interceptor_camoufox_launch - Added
interceptor_camoufox_list
46 tool updates
v2.3.0- Changed
humanizer_click10 fields changed- added
Input schema / properties / labelAdded value: +{ + "description": "Form-field label text (e.g. 'Email address')", + "type": "string" +} - removed
Input schema / properties / move_duration_msRemoved value: -{ - "default": 600, - "description": "Base duration for mouse movement (default: 600)", - "type": "number" -} - added
Input schema / properties / nameAdded value: +{ + "description": "Accessible name; used with role (e.g. 'Sign in')", + "type": "string" +} - added
Input schema / properties / roleAdded value: +{ + "description": "ARIA role (e.g. 'button', 'link', 'textbox')", + "type": "string" +} - changed
Input schema / properties / selector / descriptionPrevious value: -"CSS selector to click (resolved via getBoundingClientRect)"New value: +"CSS or XPath selector (e.g. 'button.submit', '//button[@id=\"go\"]')" - changed
Input schema / properties / target_id / descriptionPrevious value: -"Chrome target ID from interceptor_chrome_launch"New value: +"Browser target ID from interceptor_browser_launch" - added
Input schema / properties / textAdded value: +{ + "description": "Visible text to match (e.g. 'Accept cookies')", + "type": "string" +} - added
Input schema / properties / timeout_msAdded value: +{ + "default": 15000, + "description": "Max ms to wait for locator to be visible + actionable (default: 15000)", + "type": "number" +} - changed
Input schema / properties / x / descriptionPrevious value: -"X coordinate (used if selector is not provided)"New value: +"X coordinate fallback when no locator is given" - changed
Input schema / properties / y / descriptionPrevious value: -"Y coordinate (used if selector is not provided)"New value: +"Y coordinate fallback when no locator is given"
- Changed
humanizer_idle1 field changed- changed
Input schema / properties / target_id / descriptionPrevious value: -"Chrome target ID from interceptor_chrome_launch"New value: +"Browser target ID from interceptor_browser_launch"
- Changed
humanizer_move2 fields changed- removed
Input schema / properties / duration_msRemoved value: -{ - "default": 600, - "description": "Base duration in ms before Fitts scaling (default: 600)", - "type": "number" -} - changed
Input schema / properties / target_id / descriptionPrevious value: -"Chrome target ID from interceptor_chrome_launch"New value: +"Browser target ID from interceptor_browser_launch"
- Changed
humanizer_scroll2 fields changed- removed
Input schema / properties / duration_msRemoved value: -{ - "default": 400, - "description": "Total scroll duration in ms (default: 400)", - "type": "number" -} - changed
Input schema / properties / target_id / descriptionPrevious value: -"Chrome target ID from interceptor_chrome_launch"New value: +"Browser target ID from interceptor_browser_launch"
- Changed
humanizer_type4 fields changed- added
Input schema / properties / delay_msAdded value: +{ + "description": "Extra delay per character in ms. Omit to let cloakbrowser pick its own humanized cadence.", + "type": "number" +} - removed
Input schema / properties / error_rateRemoved value: -{ - "default": 0, - "description": "Typo probability per character, 0-1 (default: 0)", - "type": "number" -} - changed
Input schema / properties / target_id / descriptionPrevious value: -"Chrome target ID from interceptor_chrome_launch"New value: +"Browser target ID from interceptor_browser_launch" - removed
Input schema / properties / wpmRemoved value: -{ - "default": 40, - "description": "Typing speed in words per minute (default: 40)", - "type": "number" -}
- Added
interceptor_browser_close - Added
interceptor_browser_get_cookie - Added
interceptor_browser_get_network_field - Added
interceptor_browser_get_storage_value - Added
interceptor_browser_launch - Added
interceptor_browser_list_console - Added
interceptor_browser_list_cookies - Added
interceptor_browser_list_network_fields - Added
interceptor_browser_list_storage_keys - Added
interceptor_browser_navigate - Added
interceptor_browser_screenshot - Added
interceptor_browser_snapshot - Removed
interceptor_chrome_cdp_info - Removed
interceptor_chrome_close - Removed
interceptor_chrome_devtools_attach - Removed
interceptor_chrome_devtools_detach - Removed
interceptor_chrome_devtools_get_cookie - Removed
interceptor_chrome_devtools_get_network_field - Removed
interceptor_chrome_devtools_get_storage_value - Removed
interceptor_chrome_devtools_list_console - Removed
interceptor_chrome_devtools_list_cookies - Removed
interceptor_chrome_devtools_list_network - Removed
interceptor_chrome_devtools_list_network_fields - Removed
interceptor_chrome_devtools_list_storage_keys - Removed
interceptor_chrome_devtools_navigate - Removed
interceptor_chrome_devtools_pull_sidecar - Removed
interceptor_chrome_devtools_screenshot - Removed
interceptor_chrome_devtools_snapshot - Removed
interceptor_chrome_launch - Removed
interceptor_chrome_navigate - Changed
interceptor_status1 field changed- changed
Input schema / properties / interceptor_id / descriptionPrevious value: -"Interceptor ID (e.g., 'chrome', 'terminal', 'android-adb', 'android-frida', 'docker')"New value: +"Interceptor ID (e.g., 'browser', 'terminal', 'android-adb', 'android-frida', 'docker')"
- Changed
proxy_list_traffic1 field changed- added
Input schema / properties / source_filterAdded value: +{ + "description": "Filter by traffic source: 'explicit' (proxy-configured) or 'transparent' (iptables-redirected)", + "enum": [ + "explicit", + "transparent" + ], + "type": "string" +}
- Added
proxy_mobile_detect_iface - Added
proxy_mobile_setup - Added
proxy_mobile_teardown - Added
proxy_search_session_bodies - Changed
proxy_set_fingerprint_spoof8 fields changed- removed
Input schema / properties / disable_greaseRemoved value: -{ - "description": "Disable GREASE values in TLS ClientHello", - "type": "boolean" -} - removed
Input schema / properties / force_http1Removed value: -{ - "description": "Force HTTP/1.1 instead of HTTP/2", - "type": "boolean" -} - removed
Input schema / properties / header_orderRemoved value: -{ - "description": "Header order for outgoing requests (e.g. ['host','user-agent','accept',...])", - "items": { - "type": "string" - }, - "type": "array" -} - removed
Input schema / properties / http2_fingerprintRemoved value: -{ - "description": "HTTP/2 fingerprint (SETTINGS|WINDOW_UPDATE|PRIORITY frames). E.g. '1:65536;2:0;3:1000;4:6291456;6:262144|15663105|0:1:256:0,...'", - "type": "string" -} - removed
Input schema / properties / ja3Removed value: -{ - "description": "JA3 fingerprint string. Required if no preset is given.", - "type": "string" -} - removed
Input schema / properties / order_as_providedRemoved value: -{ - "description": "Send headers in the exact order provided (default: true when header_order is set)", - "type": "boolean" -} - changed
Input schema / properties / preset / descriptionPrevious value: -"Browser preset name (e.g. 'chrome_131', 'chrome_136'). Use proxy_list_fingerprint_presets to see available options. Individual params below override preset values."New value: +"Browser preset name (e.g. 'chrome_131', 'chrome_136'). Use proxy_list_fingerprint_presets to see available options." - changed
Input schema / properties / user_agent / descriptionPrevious value: -"User-Agent header to use with spoofed requests"New value: +"User-Agent header to use with spoofed requests (overrides preset UA)"
- Changed
proxy_set_ja3_spoof1 field changed- changed
Input schema / properties / ja3 / descriptionPrevious value: -"JA3 fingerprint string (ignored by curl-impersonate backend — use proxy_set_fingerprint_spoof with a preset instead)"New value: +"JA3 fingerprint string (ignored — use proxy_set_fingerprint_spoof with a preset instead)"
- Added
proxy_start_transparent - Added
proxy_stop_transparent - Added
proxy_transparent_status
81 tool updates
v1.0.0- Added
humanizer_click - Added
humanizer_idle - Added
humanizer_move - Added
humanizer_scroll - Added
humanizer_type - Added
interceptor_android_activate - Added
interceptor_android_deactivate - Added
interceptor_android_devices - Added
interceptor_android_setup - Added
interceptor_chrome_cdp_info - Added
interceptor_chrome_close - Added
interceptor_chrome_devtools_attach - Added
interceptor_chrome_devtools_detach - Added
interceptor_chrome_devtools_get_cookie - Added
interceptor_chrome_devtools_get_network_field - Added
interceptor_chrome_devtools_get_storage_value - Added
interceptor_chrome_devtools_list_console - Added
interceptor_chrome_devtools_list_cookies - Added
interceptor_chrome_devtools_list_network - Added
interceptor_chrome_devtools_list_network_fields - Added
interceptor_chrome_devtools_list_storage_keys - Added
interceptor_chrome_devtools_navigate - Added
interceptor_chrome_devtools_pull_sidecar - Added
interceptor_chrome_devtools_screenshot - Added
interceptor_chrome_devtools_snapshot - Added
interceptor_chrome_launch - Added
interceptor_chrome_navigate - Added
interceptor_deactivate_all - Added
interceptor_docker_attach - Added
interceptor_docker_detach - Added
interceptor_frida_apps - Added
interceptor_frida_attach - Added
interceptor_frida_detach - Added
interceptor_kill - Added
interceptor_list - Added
interceptor_spawn - Added
interceptor_status - Added
proxy_add_rule - Added
proxy_check_fingerprint_runtime - Added
proxy_clear_ja3_spoof - Added
proxy_clear_traffic - Added
proxy_clear_upstream - Added
proxy_delete_session - Added
proxy_disable_rule - Added
proxy_enable_rule - Added
proxy_enable_server_tls_capture - Added
proxy_export_har - Added
proxy_get_ca_cert - Added
proxy_get_exchange - Added
proxy_get_session - Added
proxy_get_session_exchange - Added
proxy_get_session_handshakes - Added
proxy_get_tls_config - Added
proxy_get_tls_fingerprints - Added
proxy_import_har - Added
proxy_inject_headers - Added
proxy_list_fingerprint_presets - Added
proxy_list_rules - Added
proxy_list_sessions - Added
proxy_list_tls_fingerprints - Added
proxy_list_traffic - Added
proxy_mock_response - Added
proxy_query_session - Added
proxy_remove_host_upstream - Added
proxy_remove_rule - Added
proxy_replay_session - Added
proxy_rewrite_url - Added
proxy_search_traffic - Added
proxy_session_recover - Added
proxy_session_start - Added
proxy_session_status - Added
proxy_session_stop - Added
proxy_set_fingerprint_spoof - Added
proxy_set_host_upstream - Added
proxy_set_ja3_spoof - Added
proxy_set_upstream - Added
proxy_start - Added
proxy_status - Added
proxy_stop - Added
proxy_test_rule_match - Added
proxy_update_rule
TDQS
Scored across 72 tools
Tools are mostly grouped by clear domains (proxy, session, interceptor, humanizer, fingerprinting), and descriptions clarify near-neighbor cases like traffic search vs session body search. However, some pairs could still be confused, such as proxy_get_exchange vs proxy_get_session_exchange vs interceptor_browser_get_network_field, and the convenience rule creators overlap conceptually with proxy_add_rule.
The naming follows a strong snake_case verb_noun pattern with consistent prefixes like proxy_, interceptor_browser_, and humanizer_. Minor inconsistencies exist: clear vs remove for upstreams, the deprecated proxy_set_ja3_spoof alongside proxy_set_fingerprint_spoof, and proxy_enable_server_tls_capture described as a toggle despite its name.
72 tools is a very large surface for an MCP server, even for a broad proxy/interception platform. Many tools are highly specialized and could be consolidated, such as convenience rule wrappers, session query variants, and the deprecated JA3 tool.
The toolset covers the full proxy lifecycle: start/stop/status, CA management, upstream configuration, rules, traffic capture and search, sessions, HAR import/export, TLS fingerprinting, browser automation, humanization, and process/Docker interception. There are no major workflow dead ends; list-style tools fill gaps where dedicated getters are absent.
Maintenance
Related MCP Connectors
Capture, inspect & debug HTTPS traffic across iOS, Android, browsers & backends — 304 MCP tools.
AI-native mock API server with MCP. Create REST/SOAP mocks from Claude, Cursor, or Windsurf.
Secure tunneling, reverse proxy and remote access for local applications.
Keyless webhook endpoints: capture, wait, replay, forward, and generate types from real traffic.
Related MCP Servers
- FlicenseAqualityDmaintenanceIntelligent HTTP/HTTPS proxy server with MCP integration for automated traffic monitoring, analysis, and browser setup.22-
- AlicenseAqualityFmaintenanceAn MCP server that enables AI assistants to capture and analyze HTTP/HTTPS traffic from Android devices. It supports smart searching of network requests and provides tools for detailed traffic analysis via natural language.11231MIT
- AlicenseAqualityDmaintenanceMCP server for intercepting and mocking HTTP(S) traffic via a Mockttp proxy, with tools for Android emulator setup, traffic inspection, protobuf analysis, and rule-based manipulation.3514 npmMIT
- FlicenseBqualityDmaintenanceA lightweight MCP server built on mitmproxy that lets LLMs capture, inspect, replay, and modify HTTP traffic through a set of focused tools.137-