← Back to HumanProxy

Route your automation

Point any browser agent, scraper, or HTTP client at your exit

HumanProxy exposes a standard SOCKS5 proxy. Anything that speaks SOCKS5 — Playwright, Puppeteer, Selenium, Chrome, curl, an LLM browser-agent — routes through your connected exit device with no code changes beyond a proxy setting.

Your endpoint

socks5://<device-id>:<access-token>@socks.humanproxy.teoremas.dev:1080

device-id and access-token come from your dashboard — hit “Route an agent” on a device and create a connection. Username = device id, password = access token. Use socks5h/--socks5-hostname so DNS resolves at the exit, not locally.

Connections work like API keys. Name one per integration (e.g. “Claude Desktop”, “my scraper”) — they coexist, and revoking one never breaks the others. The app keeps a stable one so its “Copy connection” button always gives the same string. Verify any of them: the request returns the exit device's IP, not yours.

Where it works — and where it doesn't

The model only decides what to do; a runtime you control does the actual browsing and HTTP calls. That runtime is what you point at HumanProxy — so its requests leave from your device's residential IP.

The rule: whatever actually makes the web request is what gets proxied. Your code, your agent, or an MCP tool / Action you host — yes. The chat's own built-in browser — no.

Claude Desktop / Cursor / Claude Code MCP — no proxy wiring

The friendliest path: add HumanProxy as an MCP connector and your assistant gets four tools — fetch_url (fast HTTP; supports format:text for clean reading), browse (real headless Chrome that runs JavaScript, for SPAs & JS bot-checks), browse_interactive (a visible browser that pauses so you can solve a CAPTCHA / log in, then hands the page back), and exit_ip — all through your residential exit, no proxy setup in your code. (browse* need Chrome installed.)

Download humanproxy-mcp: macOS (Apple Silicon) · macOS (Intel) · Windows · Linux. On macOS/Linux: chmod +x humanproxy-mcp-* (macOS also xattr -dr com.apple.quarantine …). Then in Claude Desktop's claude_desktop_config.json:

{
  "mcpServers": {
    "humanproxy": {
      "command": "/path/to/humanproxy-mcp",
      "env": { "HUMANPROXY_PROXY": "socks5h://<device-id>:<access-token>@195.201.197.248:1080" }
    }
  }
}

Cursor uses .cursor/mcp.json (same shape). Claude Code: claude mcp add humanproxy -e HUMANPROXY_PROXY=… -- /path/to/humanproxy-mcp. Copy the connection string from the app or dashboard (“Route an agent”), then ask your assistant “use exit_ip to check my IP.”

curl

# DNS resolved at the exit (socks5-hostname), returns the exit's residential IP
curl --socks5-hostname "$DEVICE:$TOKEN@socks.humanproxy.teoremas.dev:1080" https://api.ipify.org

Playwright most LLM browser-agents

Most agentic browser stacks (browser-use, LangChain/LlamaIndex browser tools, custom Playwright agents) launch Chromium under the hood — set the proxy there and every agent action egresses through the exit.

Python

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch(proxy={
        "server": "socks5://socks.humanproxy.teoremas.dev:1080",
        "username": "<device-id>",
        "password": "<access-token>",
    })
    page = browser.new_page()
    page.goto("https://example.com")  # comes from the exit's IP

Node

const browser = await chromium.launch({ proxy: {
  server: 'socks5://socks.humanproxy.teoremas.dev:1080',
  username: '<device-id>', password: '<access-token>',
}});

Puppeteer

// Puppeteer takes proxy auth via page.authenticate()
const browser = await puppeteer.launch({
  args: ['--proxy-server=socks5://socks.humanproxy.teoremas.dev:1080'],
});
const page = await browser.newPage();
await page.authenticate({ username: '<device-id>', password: '<access-token>' });

Selenium / undetected-chromedriver

# SOCKS5 with auth is easiest via a small local forwarder, or Chrome flags:
opts.add_argument("--proxy-server=socks5://socks.humanproxy.teoremas.dev:1080")
# Chrome ignores inline SOCKS creds; run one authless local hop with e.g.
# `gost -L socks5://:1081 -F socks5://DEVICE:[email protected]:1080`
# then point Chrome at socks5://127.0.0.1:1081

Plain Chrome / Chromium

chromium --proxy-server="socks5://socks.humanproxy.teoremas.dev:1080"

Chrome doesn't accept inline SOCKS credentials; put an authless local forwarder in front (see the Selenium note) or use Playwright/Puppeteer which pass auth for you.

Python requests / httpx

import requests
proxies = { "http": p, "https": p } if (p := "socks5h://<device-id>:<access-token>@socks.humanproxy.teoremas.dev:1080") else {}
requests.get("https://api.ipify.org", proxies=proxies)  # pip install requests[socks]

teoremas-browser

Our own agent browser takes a per-profile SOCKS — set the same endpoint as the profile proxy and it egresses through your exit automatically.

Rotating exits: give each device its own id/token and pick per request. Traffic is metered per device on your dashboard. Self-hosting? Run your own relay → (free) and point these snippets at your-relay:1080.