---
name: proxyjam
description: Buy and manage ProxyJam proxies (static residential / ISP IPs) for a user — browse the catalogue, price an order, place it, extend it and read the wallet — through the ProxyJam MCP server or its REST API. Use when a user asks for proxies from ProxyJam or wants to manage ones they already have.
---

# ProxyJam

ProxyJam sells dedicated proxies — static residential (ISP) IP addresses in
dozens of countries, over HTTP, HTTPS and SOCKS5 — billed per IP per period
from a prepaid wallet. Prices and the live catalogue: https://proxyjam.com/pricing.md.

## Get access

Three ways, all described in https://proxyjam.com/auth.md:

- **Sign in (MCP clients).** Add `https://proxyjam.com/mcp` with no header; a
  client that supports OAuth sign-in (claude.ai, Claude Code, ChatGPT) walks
  the user through a consent screen. Reading is on by default; spending is a
  separate box the user ticks.
- **Register as an agent.** `POST https://api.proxyjam.com/agent/auth` with
  `{"type": "anonymous", "requested_credential_type": "api_key"}` returns a
  `pj_…` key that reads the catalogue. The user can claim it by email to let
  it read their account (never spend).
- **The user's API key.** The user creates one at https://app.proxyjam.com/apikey
  (`pj_…`, shown once). Send it as `X-API-Key` or `Authorization: Bearer pj_…`.

## Use the MCP server (preferred)

- Endpoint: `https://proxyjam.com/mcp` — Streamable HTTP (also served directly at
  `https://mcp.proxyjam.com/mcp`)
- Header: `X-API-Key: pj_…`, or none at all with OAuth sign-in

```bash
# sign in: the client opens the consent screen
claude mcp add --transport http proxyjam https://proxyjam.com/mcp
# or with the user's API key
claude mcp add --transport http proxyjam https://proxyjam.com/mcp --header "X-API-Key: pj_..."
```

1. Call `list_offers` first — it is the only source of `offer_id`s. Enums
   (order statuses, currencies, proxy types, offer kinds, payment methods)
   are the `ref://…` resources.
2. Reads are free to call: `list_my_orders`, `get_order`,
   `get_my_traffic_summary`, `get_order_traffic`, `list_my_wallets`,
   `get_wallet_balance`, `list_wallet_transactions`, `get_transaction`.
3. **Money moves only on confirmation.** `create_proxy_order`,
   `extend_proxy_period` and `buy_proxy_bandwidth` return a dry-run preview
   (offer, price, current balance) unless called with `confirm=true`. Show
   the preview to the user, get an explicit yes, then call again with
   `confirm=true` and the SAME `idempotency_key` (a fresh UUID per logical
   purchase; reuse it on retries so nothing is charged twice).
4. Safe changes: `set_auto_renew`, `set_proxy_whitelist`,
   `change_proxy_protocol`, `sync_proxy_state`.
5. **Scopes.** Under OAuth sign-in or a claimed agent key, a tool outside the
   granted scopes answers with an error that names the scope. Spending and
   every change to a paid service (steps 3 and 4) need `orders:write`, which
   only the user grants, by reconnecting and ticking *Allow spending from my
   wallet*. A claimed agent key never has it.

## Or the REST API

- Base: `https://api.proxyjam.com/public/v1`, header `X-API-Key`
- OpenAPI: https://api.proxyjam.com/sdk/v1/openapi.json
- Reference: https://docs.proxyjam.com
- Readiness: `https://api.proxyjam.com/ready`

## Errors

- `Missing API key` / HTTP 401 — no credential, or it was revoked: ask the
  user for a new one or sign in again; never guess or reuse another.
- A preview whose balance is below the price — the wallet needs a top-up,
  which the user does in the dashboard; do not confirm the purchase.
- HTTP 422 on `list_offers` — `kind` takes only the values in `ref://offer-kinds`.
