proxy_set_ja3_spoof
Spoof TLS fingerprint (JA3) for HTTPS requests using a default Chrome preset. Legacy tool replaced by proxy_set_fingerprint_spoof.
Instructions
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.
Input Schema
| 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. |
Implementation Reference
- src/tools/tls.ts:112-141 (registration)Tool registration for 'proxy_set_ja3_spoof' via server.tool() — a legacy/deprecated MCP tool that accepts ja3 (ignored), user_agent, and host_patterns parameters.
server.tool( "proxy_set_ja3_spoof", "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.", { ja3: z.string().describe("JA3 fingerprint string (ignored — use proxy_set_fingerprint_spoof with a preset instead)"), user_agent: z.string().optional().describe("User-Agent header to use with spoofed requests"), host_patterns: z.array(z.string()).optional().describe("Only spoof requests to hostnames containing these substrings. Empty = spoof all HTTPS."), }, async ({ ja3: _ja3, user_agent, host_patterns }) => { try { await proxyManager.setJa3Spoof({ userAgent: user_agent, hostPatterns: host_patterns, }); return { content: [{ type: "text" as const, text: JSON.stringify({ status: "success", message: "Fingerprint spoofing enabled with default Chrome preset. Use proxy_set_fingerprint_spoof with a preset for explicit control.", config: { userAgent: user_agent, hostPatterns: host_patterns ?? [] }, }), }], }; } catch (e) { return { content: [{ type: "text" as const, text: JSON.stringify({ status: "error", error: String(e) }) }] }; } }, ); - src/tools/tls.ts:120-141 (handler)Handler function that receives { ja3, user_agent, host_patterns }, ignores ja3, and calls proxyManager.setJa3Spoof() with user_agent and host_patterns.
async ({ ja3: _ja3, user_agent, host_patterns }) => { try { await proxyManager.setJa3Spoof({ userAgent: user_agent, hostPatterns: host_patterns, }); return { content: [{ type: "text" as const, text: JSON.stringify({ status: "success", message: "Fingerprint spoofing enabled with default Chrome preset. Use proxy_set_fingerprint_spoof with a preset for explicit control.", config: { userAgent: user_agent, hostPatterns: host_patterns ?? [] }, }), }], }; } catch (e) { return { content: [{ type: "text" as const, text: JSON.stringify({ status: "error", error: String(e) }) }] }; } }, ); - src/tools/tls.ts:115-119 (schema)Input schema for proxy_set_ja3_spoof: ja3 (required string, but ignored), user_agent (optional string), host_patterns (optional string array).
{ ja3: z.string().describe("JA3 fingerprint string (ignored — use proxy_set_fingerprint_spoof with a preset instead)"), user_agent: z.string().optional().describe("User-Agent header to use with spoofed requests"), host_patterns: z.array(z.string()).optional().describe("Only spoof requests to hostnames containing these substrings. Empty = spoof all HTTPS."), }, - src/state.ts:1068-1070 (helper)ProxyManager.setJa3Spoof() — delegates to setFingerprintSpoof() which stores the config and triggers a mockttp rule rebuild.
async setJa3Spoof(config: FingerprintSpoofConfig): Promise<void> { return this.setFingerprintSpoof(config); } - src/state.ts:1063-1066 (helper)ProxyManager.setFingerprintSpoof() — stores the FingerprintSpoofConfig and if running, rebuilds mockttp rules to apply the spoofing.
async setFingerprintSpoof(config: FingerprintSpoofConfig): Promise<void> { this._ja3SpoofConfig = config; if (this._running) await this.rebuildMockttpRules(); }