mcpproxy-go

module
v0.66.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 13, 2026 License: MIT

README ΒΆ

Release Build Go Report Card Go Reference GitHub stars OpenSSF Scorecard

πŸ“Ί Watch the full walkthrough Β Β·Β  πŸ“š Read the docs Β Β·Β  🌐 mcpproxy.app

The demo above shows the embedded web UI. The MCPProxy core is a single binary for macOS, Linux, and Windows β€” the web UI ships inside it, with no extra service to run. On macOS, an optional menu‑bar app adds one‑click convenience (start/stop, server health, quarantine, logs).

MCPProxy macOS menu-bar app Β Β Β Β 
macOS menu‑bar app Β Β Β·Β Β  Activity log & audit in the macOS app

Why MCPProxy?

  • Scale beyond API limits – Federate hundreds of MCP servers while bypassing Cursor's 40-tool limit and OpenAI's 128-function cap.
  • Save tokens & accelerate responses – Agents load just one retrieve_tools function instead of hundreds of schemas. Research shows ~99 % token reduction with 43 % accuracy improvement.
  • Advanced security protection – Automatic quarantine blocks Tool Poisoning Attacks until you manually approve new servers.
  • Pluggable security scanners – Run Snyk, Semgrep, Trivy, Cisco, and other Docker-based scanners against quarantined servers before you approve them; findings are normalized to SARIF with a composite risk score. See Security scanner plugins.
  • Works offline & cross-platform – A single core binary for macOS (Intel & Apple Silicon), Windows (x64 & ARM64), and Linux (x64 & ARM64), with the web UI embedded. macOS additionally ships an optional menu-bar app.

Quick Start

1. Install

macOS (Recommended - DMG Installer):

Download the latest DMG installer for your architecture:

  • Apple Silicon (M1/M2): Download DMG β†’ mcpproxy-*-darwin-arm64.dmg
  • Intel Mac: Download DMG β†’ mcpproxy-*-darwin-amd64.dmg

Windows (Recommended - Installer):

Download the latest Windows installer for your architecture:

The installer automatically:

  • Installs both mcpproxy.exe (core server) and mcpproxy-tray.exe (system tray app) to Program Files
  • Adds MCPProxy to your system PATH for command-line access
  • Creates Start Menu shortcuts
  • Supports silent installation: .\mcpproxy-setup.exe /VERYSILENT

Alternative install methods:

macOS (Homebrew):

# macOS β€” GUI tray app (recommended):
brew install --cask smart-mcp-proxy/mcpproxy/mcpproxy

# macOS / Linux β€” headless CLI only:
brew install smart-mcp-proxy/mcpproxy/mcpproxy

The cask installs the menu-bar app (bundles the CLI); the formula is the CLI binary only. Both update via brew upgrade.

Linux (Debian/Ubuntu) β€” apt repository, auto-updates via apt upgrade:

sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://apt.mcpproxy.app/mcpproxy.gpg \
  | sudo tee /etc/apt/keyrings/mcpproxy.gpg > /dev/null
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/mcpproxy.gpg] https://apt.mcpproxy.app stable main" \
  | sudo tee /etc/apt/sources.list.d/mcpproxy.list > /dev/null
sudo apt update && sudo apt install mcpproxy

Linux (Fedora / RHEL / Rocky / AlmaLinux) β€” dnf repository, auto-updates via dnf upgrade:

sudo dnf config-manager --add-repo https://rpm.mcpproxy.app/mcpproxy.repo
# Fedora 41+ (dnf5): sudo curl -fsSL https://rpm.mcpproxy.app/mcpproxy.repo -o /etc/yum.repos.d/mcpproxy.repo
sudo dnf install -y mcpproxy

Arch Linux (AUR): mcpproxy-bin

yay -S mcpproxy-bin
# or
git clone https://aur.archlinux.org/mcpproxy-bin.git && cd mcpproxy-bin && makepkg -si

The apt and dnf packages ship a hardened systemd unit and start the service automatically. Repository signing key fingerprint: 3B6F A1AD 5D53 59DA 51F1 8DDC E1B5 9B9B A1CB 8A3B.

For one-off .deb / .rpm downloads (air-gapped installs), grab them from the latest release.

Manual download (all platforms):

Prerelease Builds (Latest Features):

Want to try the newest features? Download prerelease builds from the next branch:

  1. Go to GitHub Actions
  2. Click the latest successful "Prerelease" workflow run
  3. Download from Artifacts:
    • dmg-darwin-arm64 (Apple Silicon Macs)
    • dmg-darwin-amd64 (Intel Macs)
    • versioned-linux-amd64, versioned-windows-amd64 (other platforms)

Note: Prerelease builds are signed and notarized for macOS but contain cutting-edge features that may be unstable.

Anywhere with Go 1.26+:

go install github.com/smart-mcp-proxy/mcpproxy-go/cmd/mcpproxy@latest

2. Run

mcpproxy serve          # starts HTTP server on :8080 and shows tray

3. Add your first server

Create or edit ~/.mcpproxy/mcp_config.json:

{
  "listen": "127.0.0.1:8080",
  "mcpServers": [
    { "name": "local-python", "command": "python", "args": ["-m", "my_server"], "protocol": "stdio", "enabled": true },
    { "name": "remote-http", "url": "http://localhost:3001", "protocol": "http", "enabled": true }
  ]
}

See Configuration and Upstream Servers for the full reference.

4. Connect to your IDE/AI tool

πŸ“– Complete Setup Guide - Detailed instructions for Cursor, VS Code, Claude Desktop, and Goose

Add proxy to Cursor

One-click install into Cursor IDE

Install in Cursor IDE

Manual install

  1. Open Cursor Settings
  2. Click "Tools & Integrations"
  3. Add MCP server
    "MCPProxy": {
      "type": "http",
      "url": "http://localhost:8080/mcp/"
    }

How AI Agents Work Through MCPProxy

Once connected, your agent sees a handful of built-in MCPProxy tools instead of hundreds of upstream schemas. A typical session has three beats β€” discover, call, audit β€” plus an optional preflight gate for unattended automations.

1. Discover β€” spend one query, not your context window

The agent asks for what it needs in plain keywords via retrieve_tools:

{ "query": "create github issue", "limit": 5 }

MCPProxy runs a BM25 search across every connected server and returns only the top-ranked matches β€” each with a call_with hint recommending the right call variant for its annotations:

{
  "tools": [
    { "name": "github:create_issue", "score": 0.89, "call_with": "call_tool_write" },
    { "name": "gitlab:create_issue", "score": 0.72, "call_with": "call_tool_write" }
  ]
}

This is where the token savings come from: the schemas of the hundreds of tools the agent didn't need never enter its context. The agent loads full schemas on demand with describe_tool (batch up to 5 ids) only for the tools it's about to use.

2. Call β€” with declared intent

The agent executes the tool through the variant matching its intent (call_tool_read, call_tool_write, or call_tool_destructive), addressing it as server:tool:

{
  "name": "github:create_issue",
  "args_json": "{\"repo\": \"acme/api\", \"title\": \"Bug report\"}",
  "intent": { "operation_type": "write", "reason": "Filing bug per user request" }
}

MCPProxy validates the intent against the tool's annotations (a "read" call can't reach a destructive tool), checks quarantine and approval state, and scans arguments and responses for sensitive data before anything leaves the machine.

3. Audit β€” every call is on the record

Every call lands in the local Activity Log with a request ID, so you can reconstruct exactly what an agent did:

mcpproxy activity list                          # everything, newest first
mcpproxy activity list --request-id <id>        # one workflow, correlated

Gate automations before they burn tokens

For recurring headless jobs (cron, CI, n8n), don't let the agent discover a missing tool the expensive way. One preflight command checks that every required tool is ready β€” without contacting any upstream server β€” and reports exactly why when it isn't (server quarantined, tool changed since approval, OAuth expired, typo'd id):

mcpproxy tools preflight gh-ops:sync_issues slack:post_message --wait 10s
case $? in
  0)  run-agent-session ;;   # all ready β€” go
  10) exit 75 ;;             # transient (server starting) β€” let the next cron tick retry
  11) page-operator ;;       # blocked β€” someone must approve / enable / log in
  12) fail-pipeline ;;       # unknown tool id β€” the automation itself is misconfigured
esac

See Required-Tools Preflight for the full reason taxonomy, REST endpoint, and GitHub Actions / n8n recipes.


πŸ” Optional HTTPS Setup

MCPProxy works with HTTP by default for easy setup. HTTPS is optional and primarily useful for production environments or when stricter security is required.

πŸ’‘ Note: Most users can stick with HTTP (the default) as it works perfectly with all supported clients including Claude Desktop, Cursor, and VS Code.

Quick HTTPS Setup

1. Enable HTTPS (choose one method):

# Method 1: Environment variable
export MCPPROXY_TLS_ENABLED=true
mcpproxy serve

# Method 2: Config file
# Edit ~/.mcpproxy/mcp_config.json and set "tls.enabled": true

2. Trust the certificate (one-time setup):

mcpproxy trust-cert

3. Use HTTPS URLs:

  • MCP endpoint: https://localhost:8080/mcp
  • Web UI: https://localhost:8080/ui/

Claude Desktop Integration

For Claude Desktop, add this to your claude_desktop_config.json:

HTTP (Default - Recommended):

{
  "mcpServers": {
    "mcpproxy": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "http://localhost:8080/mcp"
      ]
    }
  }
}

HTTPS (With Certificate Trust):

{
  "mcpServers": {
    "mcpproxy": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "https://localhost:8080/mcp"
      ],
      "env": {
        "NODE_EXTRA_CA_CERTS": "~/.mcpproxy/certs/ca.pem"
      }
    }
  }
}

Certificate Management

  • Automatic generation: Certificates created on first HTTPS startup
  • Multi-domain support: Works with localhost, 127.0.0.1, ::1
  • Trust installation: Use mcpproxy trust-cert to add to system keychain
  • Certificate location: ~/.mcpproxy/certs/ (ca.pem, server.pem, server-key.pem)

Troubleshooting HTTPS

Certificate trust issues:

# Re-trust certificate
mcpproxy trust-cert --force

# Check certificate location
ls ~/.mcpproxy/certs/

# Test HTTPS connection
curl -k https://localhost:8080/api/v1/status

Claude Desktop connection issues:

  • Ensure NODE_EXTRA_CA_CERTS points to the correct ca.pem file
  • Restart Claude Desktop after config changes
  • Verify HTTPS is enabled: mcpproxy serve --log-level=debug

Documentation

Getting Started

Configuration

Features

CLI Reference

API


Contributing

We welcome issues, feature ideas, and PRs!

Development Setup

make dev-setup                # Install swag, frontend deps, Playwright
brew install prek             # Install pre-commit hook runner (or: uv tool install prek)
prek install                  # Install pre-commit hooks
prek install --hook-type pre-push  # Install pre-push hooks

Pre-commit Hooks

We use prek to catch issues before they reach CI:

Hook Stage What it does
gofmt pre-commit Auto-formats staged Go files
trailing-whitespace pre-commit Removes trailing whitespace
end-of-file-fixer pre-commit Ensures files end with newline
check-merge-conflict pre-commit Detects merge conflict markers
swagger-verify pre-push Fails if OpenAPI spec is out of date
go-build pre-push Verifies the project compiles

Run hooks manually: prek run --all-files

Build & Test

make build          # Build frontend + backend
make swagger        # Regenerate OpenAPI spec
make test           # Unit tests
make test-e2e       # E2E tests
make lint           # Run linters

Directories ΒΆ

Path Synopsis
agentloop.go β€” Spec 103 US2: the LIVE agent-loop driver.
agentloop.go β€” Spec 103 US2: the LIVE agent-loop driver.
arms
Package arms implements the encoding arms of the discovery-effectiveness profiler (spec 083).
Package arms implements the encoding arms of the discovery-effectiveness profiler (spec 083).
cmd/bench command
Command bench runs the mcpproxy benchmark.
Command bench runs the mcpproxy benchmark.
cmd/breakevencurve command
Command breakevencurve computes the fleet-size break-even curve: at how many upstream tools (and servers) does the proxy stop costing more than it saves?
Command breakevencurve computes the fleet-size break-even curve: at how many upstream tools (and servers) does the proxy stop costing more than it saves?
cmd/codeexecsaving command
Command codeexecsaving reports the RESPONSE-SIDE saving of code execution from a recorded activity export: what the sandbox's sub-call responses would have cost an agent that made those calls itself, against the script it sent and the single result it got back.
Command codeexecsaving reports the RESPONSE-SIDE saving of code execution from a recorded activity export: what the sandbox's sub-call responses would have cost an agent that made those calls itself, against the script it sent and the single result it got back.
cmd/iosplit command
Command iosplit reports code execution's cost split by BILLING DIRECTION.
Command iosplit reports code execution's cost split by BILLING DIRECTION.
cmd/warmtiktoken command
Command warmtiktoken populates the tiktoken vocabulary cache before a parallel test run.
Command warmtiktoken populates the tiktoken vocabulary cache before a parallel test run.
corpusio
Package corpusio loads public tool-retrieval corpora into the bench types (spec 083, US3).
Package corpusio loads public tool-retrieval corpora into the bench types (spec 083, US3).
replaycorpus
codeexec.go β€” the response-side saving of code execution.
codeexec.go β€” the response-side saving of code execution.
cmd
generate-types command
Package main generates TypeScript types from Go contracts
Package main generates TypeScript types from Go contracts
mcpfixture command
Command mcpfixture is a deterministic MCP upstream fixture for the release QA gate (Spec 081, FR-006/FR-007).
Command mcpfixture is a deterministic MCP upstream fixture for the release QA gate (Spec 081, FR-006/FR-007).
mcpproxy command
doctor_fix_cmd.go implements `mcpproxy doctor fix <CODE> --server <name>` (spec 044).
doctor_fix_cmd.go implements `mcpproxy doctor fix <CODE> --server <name>` (spec 044).
mcpproxy-tray command
release-gate command
Command release-gate is the Spec 081 release-qualification gate driver.
Command release-gate is the Spec 081 release-qualification gate driver.
scan-eval command
Command scan-eval bridges the Spec 065 / D2 security corpus to mcpproxy's production sensitive-data detector and emits per-entry, per-detector verdict JSON for the Python SecurityScorer (B3).
Command scan-eval bridges the Spec 065 / D2 security corpus to mcpproxy's production sensitive-data detector and emits per-entry, per-detector verdict JSON for the Python SecurityScorer (B3).
e2e
stubs/outputschema command
Command outputschema is a minimal stdio MCP server used by the Spec 056 output-schema-validation E2E test.
Command outputschema is a minimal stdio MCP server used by the Spec 056 output-schema-validation E2E test.
stubs/saniclient command
Command saniclient is a tiny MCP client used by the Spec 054 Track B verification: it connects to a running mcpproxy /mcp endpoint, calls call_tool_read for a given "server:tool", and prints the returned text so the harness can assert spotlighting / redaction / block behaviour.
Command saniclient is a tiny MCP client used by the Spec 054 Track B verification: it connects to a running mcpproxy /mcp endpoint, calls call_tool_read for a given "server:tool", and prints the returned text so the harness can assert spotlighting / redaction / block behaviour.
stubs/sanitisation command
Command sanitisation is a minimal stdio MCP server used by the Spec 054 Track B output-sanitisation E2E verification.
Command sanitisation is a minimal stdio MCP server used by the Spec 054 Track B output-sanitisation E2E verification.
internal
auth
Package auth provides agent token authentication for MCPProxy.
Package auth provides agent token authentication for MCPProxy.
branding
Package branding holds the canonical, user-facing project identifiers and URLs (homepage, repo, docs, issues) so every surface that points a user back to the project β€” CLI --version/--help, the MCP serverInfo instructions, docs links in errors β€” uses one source of truth.
Package branding holds the canonical, user-facing project identifiers and URLs (homepage, repo, docs, issues) so every surface that points a user back to the project β€” CLI --version/--help, the MCP serverInfo instructions, docs links in errors β€” uses one source of truth.
cli/output
Package output provides unified output formatting for CLI commands.
Package output provides unified output formatting for CLI commands.
codescripts
Package codescripts resolves and lists server-side stored scripts for the code_execution tool (Spec 097).
Package codescripts resolves and lists server-side stored scripts for the code_execution tool (Spec 097).
config
Package config provides configuration types and merge utilities for MCPProxy.
Package config provides configuration types and merge utilities for MCPProxy.
configimport
Package configimport provides functionality to import MCP server configurations from external tools like Claude Desktop, Claude Code, Cursor IDE, Codex CLI, and Gemini CLI.
Package configimport provides functionality to import MCP server configurations from external tools like Claude Desktop, Claude Code, Cursor IDE, Codex CLI, and Gemini CLI.
connect
Package connect provides functionality to register MCPProxy as an MCP server in various client configuration files (Claude Code, Cursor, VS Code, Windsurf, Codex, Gemini).
Package connect provides functionality to register MCPProxy as an MCP server in various client configuration files (Claude Code, Cursor, VS Code, Windsurf, Codex, Gemini).
contracts
Package contracts defines typed data transfer objects for API communication
Package contracts defines typed data transfer objects for API communication
diagnostics
Package diagnostics implements the stable error-code catalog used by mcpproxy to surface human-readable, fixable failure states to the user.
Package diagnostics implements the stable error-code catalog used by mcpproxy to surface human-readable, fixable failure states to the user.
diagnostics/hints
Package hints builds diagnostics.ClassifierHints from configuration.
Package hints builds diagnostics.ClassifierHints from configuration.
dockernaming
Package dockernaming centralises the rule for turning an MCPProxy server name into the sanitized token used inside a Docker container name (mcpproxy-<sanitized>-<suffix>).
Package dockernaming centralises the rule for turning an MCPProxy server name into the sanitized token used inside a Docker container name (mcpproxy-<sanitized>-<suffix>).
gatereport
Package gatereport defines the release-qa-gate report schema (Spec 081 FR-004/FR-010) and the merger that combines per-check JSON fragments into the single gate-report.json verdict artifact plus a human-readable summary.
Package gatereport defines the release-qa-gate report schema (Spec 081 FR-004/FR-010) and the merger that combines per-check JSON fragments into the single gate-report.json verdict artifact plus a human-readable summary.
health
Package health provides unified health status calculation for upstream MCP servers.
Package health provides unified health status calculation for upstream MCP servers.
httpapi
Package httpapi β€” diagnostics fix endpoint (spec 044).
Package httpapi β€” diagnostics fix endpoint (spec 044).
launch
Package launch exposes the core process's durable launch provenance: which component started this mcpproxy core (Spec 092 FR-001a).
Package launch exposes the core process's durable launch provenance: which component started this mcpproxy core (Spec 092 FR-001a).
management
Package management provides unified server lifecycle and diagnostic operations.
Package management provides unified server lifecycle and diagnostic operations.
oauth
Package oauth provides OAuth 2.1 authentication support for MCP servers.
Package oauth provides OAuth 2.1 authentication support for MCP servers.
observability
Package observability provides health checks, metrics, and tracing capabilities
Package observability provides health checks, metrics, and tracing capabilities
outputvalidation
Package outputvalidation provides a pure, self-contained validator that checks a tool's structured output against its declared JSON Schema (draft 2020-12).
Package outputvalidation provides a pure, self-contained validator that checks a tool's structured output against its declared JSON Schema (draft 2020-12).
preflight
Package preflight is the shared eligibility evaluator behind the required-tools preflight (Spec 098): given a caller-supplied tool ID and a caller context, it answers `ready` or exactly one failure reason from a closed 15-code enum, by a fixed precedence chain.
Package preflight is the shared eligibility evaluator behind the required-tools preflight (Spec 098): given a caller-supplied tool ID and a caller context, it answers `ready` or exactly one failure reason from a closed 15-code enum, by a fixed precedence chain.
profile
Package profile carries request-scoped in-proxy profile filtering (Spec 057).
Package profile carries request-scoped in-proxy profile filtering (Spec 057).
sandbox
Package sandbox is a spike (MCP-3232) proving an *unprivileged*, non-Docker confinement primitive for stdio MCP servers on hosts where Docker is unavailable or broken β€” notably Ubuntu 24.04 with snap-installed Docker under AppArmor, where the deb's systemd hardening fights snap-confine (see internal repo issue #457 / cmd/mcpproxy/doctor_env_snapdocker.go).
Package sandbox is a spike (MCP-3232) proving an *unprivileged*, non-Docker confinement primitive for stdio MCP servers on hosts where Docker is unavailable or broken β€” notably Ubuntu 24.04 with snap-installed Docker under AppArmor, where the deb's systemd hardening fights snap-confine (see internal repo issue #457 / cmd/mcpproxy/doctor_env_snapdocker.go).
security
Package security provides sensitive data detection for MCP tool calls.
Package security provides sensitive data detection for MCP tool calls.
security/detect
Package detect implements the deterministic, offline MCP tool-scanner v2 (Spec 076).
Package detect implements the deterministic, offline MCP tool-scanner v2 (Spec 076).
security/patterns
Package patterns provides sensitive data detection patterns for various credential types.
Package patterns provides sensitive data detection patterns for various credential types.
server
Spec 085 US3 β€” pre-dispatch argument validation (FR-013) and the self-healing invalid_params error renderer shared by Path A (pre-dispatch) and Path B (best-effort upstream classification).
Spec 085 US3 β€” pre-dispatch argument validation (FR-013) and the self-healing invalid_params error renderer shared by Path A (pre-dispatch) and Path B (best-effort upstream classification).
shellwrap
Package shellwrap provides platform-level helpers for wrapping commands in the user's login shell and for resolving tool binaries (e.g.
Package shellwrap provides platform-level helpers for wrapping commands in the user's login shell and for resolving tool binaries (e.g.
stringutil
Package stringutil provides common string utility functions.
Package stringutil provides common string utility functions.
toolannotations
Package toolannotations is the single source of truth for MCP tool-annotation filter semantics (Spec 035 F4, Spec 094 FR-004).
Package toolannotations is the single source of truth for MCP tool-annotation filter semantics (Spec 035 F4, Spec 094 FR-004).
toolsig
Package toolsig compiles deterministic compact tool signatures (Spec 085, Compact Router) from a tool's JSON Schema (ToolMetadata.ParamsJSON) and its description.
Package toolsig compiles deterministic compact tool signatures (Spec 085, Compact Router) from a tool's JSON Schema (ToolMetadata.ParamsJSON) and its description.
toonenc
Package toonenc implements the adaptive TOON encoder for tool-call result text blocks (spec 084).
Package toonenc implements the adaptive TOON encoder for tool-call result text blocks (spec 084).
tui
updatecheck
Package updatecheck provides centralized version checking against GitHub releases.
Package updatecheck provides centralized version checking against GitHub releases.
upstream/launcher
Package launcher manages locally-spawned upstream processes that expose their MCP endpoint over HTTP / SSE / streamable-HTTP transports.
Package launcher manages locally-spawned upstream processes that expose their MCP endpoint over HTTP / SSE / streamable-HTTP transports.
upstream/limiter
Package limiter implements the bounded-concurrency admission control used by the upstream tool-call choke point (spec 093, GH #955).
Package limiter implements the bounded-concurrency admission control used by the upstream tool-call choke point (spec 093, GH #955).
winjob
Package winjob provides Windows Job Object based process-tree cleanup.
Package winjob provides Windows Job Object based process-tree cleanup.
scripts
gen-corpus-v2-dump command
Command gen-corpus-v2-dump exports every indexed tool β€” with its FULL JSON input schema β€” from a mcpproxy Bleve index directory, as the raw material of the spec-083 schema-bearing frozen corpus (corpus_v2.tools.json).
Command gen-corpus-v2-dump exports every indexed tool β€” with its FULL JSON input schema β€” from a mcpproxy Bleve index directory, as the raw material of the spec-083 schema-bearing frozen corpus (corpus_v2.tools.json).
specs
001-update-version-display/contracts
Package contracts defines types for the version/update feature.
Package contracts defines types for the version/update feature.
test
launcher-server command
Command launcher-server is a tiny HTTP MCP server used as the child process in the e2e test for spec 046 (local launcher for HTTP/SSE upstreams).
Command launcher-server is a tiny HTTP MCP server used as the child process in the e2e test for spec 046 (local launcher for HTTP/SSE upstreams).
tests
oauthserver
Package oauthserver provides a reusable OAuth 2.1 test server for E2E testing.
Package oauthserver provides a reusable OAuth 2.1 test server for E2E testing.
oauthserver/cmd/server command
Standalone OAuth test server for browser-based testing (Playwright).
Standalone OAuth test server for browser-based testing (Playwright).

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL