Skip to main content
Glama

proxy_set_fingerprint_spoof

Spoof outgoing TLS and HTTP/2 fingerprints to impersonate Chrome or Firefox using browser presets. Optionally restrict spoofing to specific hosts or override user agent.

Instructions

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

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
presetNoBrowser preset name (e.g. 'chrome_131', 'chrome_136'). Use proxy_list_fingerprint_presets to see available options.
user_agentNoUser-Agent header to use with spoofed requests (overrides preset UA)
host_patternsNoOnly spoof requests to hostnames containing these substrings. Empty = spoof all HTTPS.
disable_redirectNoDisable automatic redirect following
insecure_skip_verifyNoSkip TLS certificate verification

Implementation Reference

  • MCP tool handler for 'proxy_set_fingerprint_spoof'. Defines the tool schema (preset, user_agent, host_patterns, disable_redirect, insecure_skip_verify), resolves browser preset via resolveBrowserPreset(), builds FingerprintSpoofConfig, and calls proxyManager.setFingerprintSpoof(config) to apply it.
    // ── Set full fingerprint spoof ──
    server.tool(
      "proxy_set_fingerprint_spoof",
      "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).",
      {
        preset: z.string().optional().describe("Browser preset name (e.g. 'chrome_131', 'chrome_136'). Use proxy_list_fingerprint_presets to see available options."),
        user_agent: z.string().optional().describe("User-Agent header to use with spoofed requests (overrides preset UA)"),
        host_patterns: z.array(z.string()).optional().describe("Only spoof requests to hostnames containing these substrings. Empty = spoof all HTTPS."),
        disable_redirect: z.boolean().optional().describe("Disable automatic redirect following"),
        insecure_skip_verify: z.boolean().optional().describe("Skip TLS certificate verification"),
      },
      async ({ preset, user_agent, host_patterns, disable_redirect, insecure_skip_verify }) => {
        try {
          let config: FingerprintSpoofConfig;
    
          if (preset) {
            const base = resolveBrowserPreset(preset);
            config = {
              userAgent: user_agent ?? base.userAgent,
              hostPatterns: host_patterns,
              disableRedirect: disable_redirect,
              insecureSkipVerify: insecure_skip_verify,
              preset,
            };
          } else {
            config = {
              userAgent: user_agent,
              hostPatterns: host_patterns,
              disableRedirect: disable_redirect,
              insecureSkipVerify: insecure_skip_verify,
            };
          }
    
          await proxyManager.setFingerprintSpoof(config);
    
          return {
            content: [{
              type: "text" as const,
              text: JSON.stringify({
                status: "success",
                message: "Fingerprint spoofing enabled",
                config,
              }),
            }],
          };
        } catch (e) {
          return { content: [{ type: "text" as const, text: JSON.stringify({ status: "error", error: String(e) }) }] };
        }
      },
    );
  • ProxyManager.setFingerprintSpoof() - stores the config and triggers mockttp rule rebuild to apply the spoofing to outgoing requests.
    async setFingerprintSpoof(config: FingerprintSpoofConfig): Promise<void> {
      this._ja3SpoofConfig = config;
      if (this._running) await this.rebuildMockttpRules();
    }
  • FingerprintSpoofConfig interface - defines the config shape used by the tool (userAgent, hostPatterns, disableRedirect, insecureSkipVerify, preset).
    export interface FingerprintSpoofConfig {
      userAgent?: string;
      hostPatterns?: string[];
      disableRedirect?: boolean;
      insecureSkipVerify?: boolean;
      preset?: string;
    }
  • BrowserPreset interface - defines the preset shape (name, description, userAgent, impitBrowser) used by the tool to map preset names to impit impersonation targets.
    export interface BrowserPreset {
      name: string;
      description: string;
      userAgent: string;
      impitBrowser: string;     // impit Browser enum value, e.g. "chrome131"
    }
  • resolveBrowserPreset() - resolves a preset name string to a BrowserPreset object, used by the tool handler to get the userAgent and impitBrowser for the chosen preset.
    export function resolveBrowserPreset(name: string): BrowserPreset {
      const preset = PRESETS[name];
      if (!preset) {
        const available = Object.keys(PRESETS).join(", ");
        throw new Error(`Unknown browser preset '${name}'. Available: ${available}`);
      }
      return preset;
    }
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It 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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

Install Server

Other Tools

Latest Blog Posts

MCP directory API

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

curl -X GET 'https://glama.ai/api/mcp/v1/servers/yfe404/proxy-mcp'

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