tierproxy

io.github.tierproxyPublished by GitHub account tierproxyv0.4.0Updated Oct 24, 2026

Multi-provider proxy infrastructure for AI/ML. Geo, sessions, cost-aware routing, usage tools.

Overview

AI-generated overview

TierProxy's local MCP server lets an assistant fetch URLs through a multi-provider proxy with geo targeting, sessions, cost-aware routing, and usage checks.

What you can do
Fetch web pages through the proxy, optionally choosing a country and a sticky session ID for multi-step crawls. Route each request through the cheapest, fastest, most reliable, or balanced healthy upstream. Inspect gateway health and upstream status. Check usage and remaining quota, with a live usage stream. Apply cost guardrails such as a monthly budget that blocks requests before overspending.
When to use it
Useful when an assistant needs to retrieve web pages through rotating or geo-located proxy infrastructure, keep sessions across a crawl, or watch proxy cost and quota from within a chat client such as Claude Desktop, Cursor, Cline, or Windsurf.
Requirements
Runs locally over stdio as the tierproxy-mcp command, installed from PyPI with the mcp extra (pip install tierproxy[mcp]). Requires a TierProxy API key in the TIERPROXY_API_KEY environment variable. The README states the gateway is a preview release and live use requires an invitation or waitlist signup.
Before you install
The TIERPROXY_API_KEY secret is passed in the client config and grants access to a paid proxy service; requests may incur charges, so budget guardrails matter. Fetched pages and target URLs are sent to TierProxy's gateway, a third party. The README marks the gateway as not generally available, so expect limited or unstable access.

Installation

In SourceWeft

  1. Open tierproxy in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

tierproxy — Python SDK

🚧 Preview release. Gateway is not yet generally available. Join the waitlist at [email protected]. SDK is functional but tierproxy doctor against a live gateway requires invitation.

[PyPI version] [Python versions] [Downloads] [CI] [codecov] [License: Apache 2.0] [OpenAPI 3.1] [MCP compatible]

Premium multi-provider proxy infrastructure for AI/ML pipelines. Built for engineers who measure cost, latency, and success rate twice — and write Python.

Install

bash
pip install tierproxy

Quickstart — five-second flavor

python
import tierproxyr = tierproxy.get("https://example.com", country="US")print(r.text)

That's it. (Set TIERPROXY_API_KEY env var first.)

Three lines, persistent session

python
from tierproxy import TierProxywith TierProxy() as g:    print(g.me.get().client_id)    r = g.get("https://example.com", country="US", session_id="s1")

Auto-pick the cheapest healthy upstream every request

python
g = TierProxy(routing="cheapest")  # also: "fastest", "most_reliable", "balanced"g.get("https://example.com")     # picks via /v1/health/upstreams under the hood

Cost guardrails

python
g = TierProxy(    monthly_budget_usd=200.0,    # raises BudgetExceededError before going over)

Power-user knobs

python
import httpxfrom tierproxy import TierProxyfrom tierproxy.retry import RetryPolicy
g = TierProxy(    api_key="tp_live_...",    base_url="https://my-self-hosted-gw:8444",    timeout=10.0,    retry_policy=RetryPolicy(max_retries=5, retry_on_status=frozenset({500, 502})),    http_client=httpx.Client(verify=False),  # custom transport    user_agent_suffix="my-app/2.3",          # attribution)

Raw modes (Playwright, curl, etc.)

python
from tierproxy import ProxyURL
p = ProxyURL(api_key="tp_live_...", country="US", mode="username_encoding")print(p.http_url())  # http://customer-tp_live_...-cc-US:[email protected]:443

Error handling

Every SDK error inherits from tierproxy.TierProxyError and carries a request_id for support escalation:

python
from tierproxy import TierProxy, RateLimitErrorimport time
with TierProxy() as g:    try:        resp = g.get("https://example.com/page")    except RateLimitError as e:        time.sleep(e.retry_after or 5)        resp = g.get("https://example.com/page")

See Errors reference for the full HTTP-status-to-exception mapping.

AI agent integration

The SDK exposes its response models as JSON Schema and as pre-built tool definitions for Anthropic Claude and OpenAI function-calling:

python
import anthropicfrom tierproxy import TierProxy, schemas
with TierProxy() as gw:    anthropic.Anthropic().messages.create(        model="claude-sonnet-4-6",        max_tokens=1024,        tools=schemas.anthropic_tools(),        messages=[{"role": "user", "content": "How much quota is left?"}],    )

See the AI integration guide and the MCP server in examples/mcp_claude_desktop.md.

How tierproxy compares

tierproxySmartproxy SDKBright Data SDKOxylabs SDKDataImpulse
Multi-provider routing✅❌❌❌❌
Client-side smart selector (cost-aware)✅❌❌❌❌
Live usage streaming (SSE)✅❌❌❌❌
MCP server (Claude/Cursor/Cline)✅❌❌❌❌
OpenTelemetry built-in✅❌❌❌❌
Sync + async parity✅partialpartialpartialpartial
AI/ML framework examples shipped80100
Type-safe (Pydantic v2 + mypy strict)✅❌❌partial❌
OpenAPI 3.1 spec✅❌❌❌❌
Pip-installable CLI (tierproxy doctor)✅❌❌❌❌
Per-request cost attribution (lazy)✅❌❌❌❌
JA3/JA4 TLS fingerprint rotation✅❌❌❌❌
Rate-limit learning + auto-failover✅❌❌❌❌
LicenseApache 2.0proprietaryproprietaryproprietaryproprietary

Features

  • Five-second quickstart — import tierproxy; tierproxy.get(url, country="US")
  • Layered API — five integration levels from one-liner to power-user knobs
  • Smart routing — routing="cheapest" auto-picks healthy upstream per request
  • Cost guardrails — monthly_budget_usd= refuses requests that would exceed budget
  • Per-request cost attribution — client.cost_for(resp) returns USD; lazy 30s cache, no per-request overhead
  • Client-side response caching — cache_ttl=300, cache_max_response_size=262144 LRU with size cap
  • Multi-provider auto-failover — auto_failover=True retries with next-best upstream on 429/5xx
  • Rate-limit learning — client.rate_limits.get() surfaces gateway-aggregated 429s per target domain
  • JA3/JA4 TLS rotation — per-upstream fingerprint randomization (gateway side; see tls-fingerprint guide)
  • Cookie persistence — cookies stick to session_id across multi-step crawls
  • Streaming responses — client.get(url, stream=True) returns iterator (large files, SSE)
  • Live SSE stream — for delta in g.usage.stream() tails month-to-date bytes
  • MCP server — tierproxy-mcp exposes proxy as tools to Claude/Cursor/Cline
  • 8 framework integrations — LangChain, LlamaIndex, Crawl4AI, Playwright, Firecrawl, Browser-Use, CrewAI
  • OpenTelemetry opt-in — pip install tierproxy[otel] for distributed tracing
  • Geo + sticky sessions — countries, cities, 1-1440min session pins
  • Dual URL syntax — headers (httpx/requests) AND username-encoding (Playwright)
  • Type-safe end-to-end — Pydantic v2 models, mypy strict, full IDE autocomplete

See examples/ for LangChain/LlamaIndex/Crawl4AI/Playwright and examples/levels.py for a runnable demo of every level.

Use with your favorite AI/agent framework

FrameworkExampleNotes
LangChainwith_langchain.pyRAG document loaders through proxy
LlamaIndexwith_llamaindex.pySimpleWebPageReader through proxy
Crawl4AIwith_crawl4ai.pyPlaywright crawler + tierproxy
Firecrawl (hot)with_firecrawl.pySelf-hosted Firecrawl + residential IPs
Browser-Use (hot)with_browser_use.pyLLM-driven autonomous browser
CrewAI (hot)with_crewai.pyMulti-agent scraper crew + cost-aware routing
Playwrightwith_playwright.pyDirect Playwright with tierproxy
MCP (Claude/Cursor/Cline/Windsurf) (unique)mcp_claude_desktop.mdNative tool integration via tierproxy-mcp

MCP server (Claude Desktop / Cursor / Cline / Windsurf)

bash
pip install tierproxy[mcp]

Then add to your MCP client config:

json
{  "mcpServers": {    "tierproxy": {      "command": "tierproxy-mcp",      "env": { "TIERPROXY_API_KEY": "tp_live_..." }    }  }}

Now your AI assistant can call fetch_url(url, country="US"), inspect health and usage, and route through the cheapest healthy upstream — no glue code, no httpx imports, no boilerplate.

Source: README.md at commit f168da1

Tools

0
SourceWeft has not started this package in its sandbox yet, so its tools are not known.

Version history

1
  1. v0.4.0LatestSep 16, 2026

Score

50% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts

    Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.

  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listed15 pts

    Answer tools/list without a credential, or ship a package that starts in a sandbox without one.

  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts