RQ

Rquest MCP Server: Accurate TLS JA3/JA4 Emulation

Use an MCP server to send realistic browser-like HTTP requests with accurate TLS/JA3/JA4 fingerprints to bypass anti-bot protections.

Quick Install
npx -y @xxxbrian/mcp-rquest

Overview

Rquest MCP Server is a lightweight Model Context Protocol (MCP) server that produces realistic, browser-like HTTP requests by accurately emulating TLS fingerprints (JA3 and JA4). It exposes a simple JSON HTTP API so automation tools, language-model agents, or scraping pipelines can request outbound HTTP calls that mimic the TLS handshake characteristics of real browsers and clients. This helps reduce false positives from anti-bot systems that rely on TLS fingerprinting.

The server is designed for developers building web-scraping, testing, or automation systems that need to present consistent, high-fidelity TLS/HTTP fingerprints without running full browser instances. It accepts structured request descriptions (URL, headers, body, fingerprint profile, proxy settings) and performs the network round trip using the requested TLS profile, returning the response plus metadata about the TCP/TLS handshake.

Features

  • Accurate JA3 and JA4 TLS fingerprint emulation to match common browser clients
  • Configurable TLS profiles and client-hello customization
  • Support for HTTP/1.1 and HTTP/2 requests
  • Proxy support (HTTP/HTTPS/SOCKS) and per-request proxy override
  • Cookie and redirect handling options
  • Simple JSON REST API compatible with MCP-style workflows
  • Docker image for easy deployment and single-binary/server mode
  • Logging and verbose/debug modes for troubleshooting
  • Concurrency and request timeouts for production workloads

Installation / Configuration

Quick start using the public Docker image:

# Pull the image
docker pull xxxbrian/mcp-rquest:latest

# Run the server on port 8080
docker run -d --name rquest-mcp \
  -p 8080:8080 \
  -e LOG_LEVEL=info \
  xxxbrian/mcp-rquest:latest

docker-compose example with persistent config:

version: "3.7"
services:
  rquest:
    image: xxxbrian/mcp-rquest:latest
    ports:
      - "8080:8080"
    environment:
      - LOG_LEVEL=info
      - MAX_WORKERS=8
    volumes:
      - ./fingerprints:/app/fingerprints:ro

Environment variables (common):

  • LOG_LEVEL: debug|info|warn|error
  • BIND_ADDR: address to bind (default 0.0.0.0)
  • PORT: listen port (default 8080)
  • MAX_WORKERS: concurrent request workers
  • FINGERPRINTS_DIR: path to TLS fingerprint profiles

Config file (JSON example):

{
  "bind": "0.0.0.0",
  "port": 8080,
  "max_workers": 8,
  "fingerprints_dir": "/app/fingerprints",
  "default_timeout_seconds": 30
}

API Reference (examples)

Basic POST /request payload:

POST /request
Content-Type: application/json

{
  "url": "https://example.com/",
  "method": "GET",
  "headers": {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) ..."
  },
  "tls": {
    "profile": "chrome-116-windows",
    "ja3": "771,4865-4866-4867...,...",
    "ja4": "..."
  },
  "proxy": "socks5://127.0.0.1:9050",
  "follow_redirects": true,
  "timeout": 15
}

Sample curl:

curl -sS -X POST http://localhost:8080/request \
  -H "Content-Type: application/json" \
  -d '{"url":"https://example.com","method":"GET","tls":{"profile":"chrome-116-windows"}}'

Response (summary):

{
  "status": 200,
  "headers": { "content-type": "text/html; charset=utf-8" },
  "body": "<!doctype html>...",
  "tls_metadata": {
    "ja3": "...",
    "ja4": "...",
    "cipher": "TLS_AES_256_GCM_SHA384"
  },
  "round_trip_ms": 342
}

API endpoints (common):

  • POST /request — perform a TLS-emulated request
  • GET /fingerprints — list available TLS profiles
  • GET /health — health check

Available Resources

  • GitHub repository: https://github.com/xxxbrian/mcp-rquest
  • Example fingerprint profiles (included in /fingerprints in repo)
  • Example clients: curl, Python snippet, Node.js examples (see examples/ directory)
  • MCP specification: see linked MCP docs in repo for protocol mapping and client bindings

Use Cases

  • Web scraping: Fetch pages that enforce TLS fingerprinting blocks by presenting browser-like JA3/JA4 values without launching a full browser.
  • LLM agents: Allow language model agents to request real HTTP resources in a controlled, fingerprinted way using the MCP API.
  • QA and testing: Test server behavior under different TLS client-hello shapes and cipher suites for compatibility or security testing.
  • A/B fingerprint experiments: Rotate TLS profiles across requests to measure anti-bot sensitivity and calibrate scraping strategies.
  • Proxy chaining: Route traffic through per-request proxies while retaining correct TLS handshake characteristics.

Example: scrape a site that blocks headless browsers

  1. Query /fingerprints to pick a “chrome-116” profile.
  2. POST /request with that profile and a normal browser User-Agent.
  3. Inspect tls_metadata to confirm JA3/JA4 matches expected values.

Troubleshooting & Security

  • If responses are blocked, try selecting a different TLS profile or updating fingerprint data.
  • Use the debug log level to capture client-hello details and TLS negotiation traces.
  • Run behind a firewall and avoid using the server to access unauthorized data — verify scraping targets’ terms of service.
  • Rotate fingerprints responsibly; some providers monitor for obvious rotation patterns.

For integration examples, configuration options, and advanced fingerprint editing, refer to the repository README and examples on GitHub.