Provides verified HTTP, SOCKS4, and SOCKS5 proxy lists that are rebuilt hourly through automated handshake and content checks.
Also known as maximilianfeix/proxy-scraper, proxy-scraper-cli
- Stars
- 91
- Tools
- —
- Downloads, 30 days
- 1,606
- Latest version
- 1.34.0
- Last commit
- Nov 14, 2026
- License
- MIT
What is proxy-scraper MCP?
proxy-scraper provides verified HTTP, SOCKS4, and SOCKS5 proxy lists that are rebuilt hourly through automated handshake and content checks.
Summary generated from the project's README
About proxy-scraper MCP server
Developers seeking verified proxy lists can use this tool to access HTTP, SOCKS4, and SOCKS5 proxies that are rebuilt every hour. The system uses automated handshake and content checks to ensure only working proxies are listed, providing results that have passed basic, confirm, and content tests. This approach results in shorter, more reliable lists compared to many other free sources found on GitHub.
Users can interact with the service via a command line interface using uvx or pipx run to pick and verify specific proxies from your own network. The server provides various data formats including plain text, JSON, and CSV, which can be accessed without an API key or signup. Specialized lists are available for specific needs, such as proxies that work with Google, Reddit, or Amazon, as well as elite or HTTPS-capable options.
What you can do with it
- 1Retrieve verified SOCKS5 proxiesFind a specific number of working SOCKS5 proxies that pass a real-time verification check from your current network.
- 2Filter proxies by website compatibilityIdentify proxies that are known to successfully connect to specific platforms like TikTok or Discord.
Written from the project's README. Every use case is checked against a quote from it.
How to install proxy-scraper MCP
Formats verified 10 Nov 2026Add to CursorAdd to GooseInstall proxy-scraper MCP in Claude Code
$ claude mcp add proxy-scraper -- uvx proxy-scraper-cliInstall proxy-scraper MCP in Cursor
~/.cursor/mcp.json
{
"mcpServers": {
"proxy-scraper": {
"command": "uvx",
"args": [
"proxy-scraper-cli"
]
}
}
}Install proxy-scraper MCP in VS Code
.vscode/mcp.json
{
"servers": {
"proxy-scraper": {
"type": "stdio",
"command": "uvx",
"args": [
"proxy-scraper-cli"
]
}
}
}Install proxy-scraper MCP in VS Code CLI
$ code --add-mcp '{"name":"proxy-scraper","type":"stdio","command":"uvx","args":["proxy-scraper-cli"]}'Install proxy-scraper MCP in Claude Desktop
claude_desktop_config.json
{
"mcpServers": {
"proxy-scraper": {
"command": "uvx",
"args": [
"proxy-scraper-cli"
]
}
}
}Install proxy-scraper MCP in Codex
$ codex mcp add proxy-scraper -- uvx proxy-scraper-cliInstall proxy-scraper MCP in Codex config.toml
~/.codex/config.toml
[mcp_servers.proxy-scraper] command = "uvx" args = ["proxy-scraper-cli"]
Install proxy-scraper MCP in Gemini CLI
$ gemini mcp add -s user proxy-scraper uvx -- proxy-scraper-cliInstall proxy-scraper MCP in Gemini settings.json
~/.gemini/settings.json
{
"mcpServers": {
"proxy-scraper": {
"command": "uvx",
"args": [
"proxy-scraper-cli"
]
}
}
}Configuration
PROXY_SCRAPER_SERVE_PASSWORD
| Name | Description | |
|---|---|---|
| PROXY_SCRAPER_SERVE_PASSWORD | — |
Automated checks
Ran Nov 12, 2026Full report →Passed our automated checks. That is not a security audit: read the code and give the server the narrowest access it needs. How checks work
- Source repository linked and reachablePass
- Open source license (OSI)Pass
- Commit or release in the last yearPass
- Package name not close to a popular packagePass
- Remote endpoint uses HTTPSNot checked
- Destructive tools are labelledNot checked
- No hidden instructions to the modelPass
- No critical advisory in the package or its dependenciesPass
README
View on GitHubFree HTTP, SOCKS4 and SOCKS5 proxy lists, rebuilt about every hour. A proxy is listed only if it passed the checks of that run, and the result of every check is published with it.
English · 简体中文 · Español · Deutsch · Русский · Português (Brasil) · Français
Website · Benchmark · All lists · Install · Python API · For AI agents · Proxy server · Discord bot · All docs
https://proxy-scraper.de/all.txt
https://proxy-scraper.de/http.txt
https://proxy-scraper.de/socks4.txt
https://proxy-scraper.de/socks5.txt
http.txt, socks4.txt and socks5.txt hold one ip:port per line, all.txt one type://ip:port. Best first, so head -n 20 gives you the best ones. No signup, no API key, CORS headers included. The badges above are the counts of the last run. The same files are on the proxy-list branch, on jsDelivr and in a repository of their own, free-proxy-list. HTTPS-only, elite, stable, per country, per site, JSON and CSV: every list.
Check them from your own network before you use them. No install needed, uvx comes with uv (pipx run does the same):
uvx proxy-scraper-cli --pick 3 --verify # up to 3 proxies from the hourly list that pass right now, from your network
Why this list
Most free proxy lists on GitHub are long, and most of their entries fail when they are checked. This list is shorter because each run publishes only the proxies that passed. The benchmark runs the same checks on the popular lists every hour and shows what share of each one passes:
Redrawn about every hour from the hourly runs on a GitHub Actions runner. The date is in the chart. The benchmark page has the counts behind each share, how they are measured and why proxy-scraper's own list isn't in it.
What a proxy on the list has passed, in the last run, from that runner:
| Check | What runs | Required for the list |
|---|---|---|
basic |
A handshake (HTTP, SOCKS4 or SOCKS5) and a first request that returns a public exit IP that isn't ours | yes |
confirm |
A second request to an unrelated site, which has to see the same exit IP | yes |
content |
A static test page over plain HTTP that has to arrive byte for byte as fetched directly | yes |
https |
A tunnel to port 443 of one test host with a TLS handshake that verifies | no, recorded per proxy (https.txt has the ones that passed) |
Each check ends as passed, failed, unavailable or skipped, with a reason code, the target and the time, in proxies.json, in the CSV and in the tool's output. A check that didn't run is never shown as passed. Details: check states.
What a pass doesn't tell you. Free proxies are run by strangers. Of one run's list, about a quarter was on the list again 24 runs later (median of the week ending 13 Oct 2026). A pass is one measurement, from one network, against test targets: it is not a promise for the next hour or for the site you care about. The HTTPS check is a verified TLS connection to one test host, not a security rating. Use free proxies for public data and testing, never for logins, payments or anything personal. → What the numbers show and what they don't · Why free proxies fail · How it compares · Who runs free proxies
Used by: the hourly list is a built-in source of monosans/proxy-scraper-checker and gfpcom/free-proxy-list.
Live proxy list
About every hour GitHub Actions runs proxy-scraper and publishes the hits to the proxy-list branch – every entry passed the first request, the second request and the content check in the last run (the HTTPS test is recorded per entry, not required), best first: fast ones that are likely to still be up come on top.
| List | Format | Link |
|---|---|---|
| All | socks5://1.2.3.4:1080 |
all.txt |
| HTTP · SOCKS4 · SOCKS5 | 1.2.3.4:8080 |
http.txt · socks4.txt · socks5.txt |
| HTTPS-capable only | type://ip:port |
https.txt |
| Elite only | type://ip:port |
elite.txt |
| Gets through to Google · Reddit · Amazon · Instagram · TikTok · Discord (one test request got a normal page in the last run) | type://ip:port |
google.txt · reddit.txt · amazon.txt · instagram.txt · tiktok.txt · discord.txt |
| Stable, on the list in 90 %+ of this week's runs | type://ip:port |
stable.txt |
| With all details | latency, country, HTTPS, anonymity, exit IP, uptime, sites | proxies.json · proxies.csv |
curl -s https://raw.githubusercontent.com/maximilianfeix/proxy-scraper/proxy-list/socks5.txt | head
The same lists live in a repository of their own, maximilianfeix/free-proxy-list: one list per protocol, per country and per site, updated every hour, with the numbers of the last run on the front page. Watch or star it to keep it at hand.
→ Browse it on the website – search, filter by type, country, HTTPS, provider and latency, see how long each proxy has been on the list and in how many of the week's runs, copy or download exactly the proxies you need.
Every protocol and country also has its own page with a plain download, e.g. SOCKS5 or Germany (country/de/proxies.txt).
Where they come from: which free proxy lists actually work ranks every source of the hourly runs – how many proxies each one lists, how many passed every check and the share. The same as data: sources.json.
Over time: every day the first run's proxies.json is kept for good as a gzipped asset of the release of that year, like snapshots-2026 – proxies-2026-09-27.json.gz and so on, for anyone who wants to look at free proxies over weeks and months.
Every file is also on the website, which isn't rate limited like raw.githubusercontent and sends CORS headers, so it works straight from the browser: https://proxy-scraper.de/socks5.txt. jsDelivr works too, but can lag behind by a few hours.
Or let the tool start from it: proxy-scraper --recheck live downloads the list and checks it again from your network – well under a minute instead of a full scan. How many still work from your network differs a lot from the list's own count, which is the point of checking again. Add --serve and the result is a rotating proxy.
The tool: check proxies from your own network
The list is checked from GitHub's servers. Whether a proxy works from where your code runs is a different question, and proxy-scraper, the tool that builds the list, answers it: it collects public HTTP, SOCKS4 and SOCKS5 proxies from hundreds of lists, runs up to four checks on each one and keeps the outcome of each check for the proxies it lists (for the rest it counts how each check ended).
https://github.com/user-attachments/assets/b99c1d8f-5bce-4a52-a8a9-b9c2c726301b
21 seconds · real interface, example numbers, documentation IPs · mp4
uvx proxy-scraper-cli --pick 3 --verify # up to 3 proxies from the hourly list that pass right now, from your network
uvx proxy-scraper-cli --diagnose socks5://HOST:PORT # one proxy, check by check: what it did and what it didn't
A real terminal recording, made against six simulated proxies on localhost (reproduce it). It shows how results are reported. It measures nothing about public proxies.
The package is proxy-scraper-cli on PyPI (the plain name is taken). Once installed, the command is proxy-scraper. --verify and --diagnose need version 1.30 or newer.
Three ways to get proxies, and what "checked" means for each:
| Command | Where the proxies come from | Checked | Takes |
|---|---|---|---|
proxy-scraper --pick 5 |
the published list | from GitHub's servers when the list was built, about every hour | under a second |
proxy-scraper --pick 5 --verify |
the published list | now, from your network | seconds; the checks stop after 90 s, plus a few seconds to load the list |
proxy-scraper -y |
every list the tool knows | now, from your network | minutes (a few in the hourly runs) |
What you get
- Every check has an outcome you can read.
passed,failed,unavailableorskipped, with a reason code, the target and the time, in the terminal, in JSON and from Python. A check target that is down doesn't turn the proxies checked against it into failures. → Check states - Fresh when it matters.
--pick --verifychecks a few proxies from your own network, usually in seconds.--recheckdoes the same for a list of your own, and--diagnosetells you why one proxy doesn't work. - More than a list. A rotating local proxy server, a Python API, an MCP server for AI agents, Docker, and exports for curl, proxychains, Clash and sing-box.
Install
Python 3.9 to 3.14.
With pipx (recommended – gives you a proxy-scraper command in its own environment):
pipx install proxy-scraper-cli
proxy-scraper
With Homebrew on macOS and Linux:
brew install maximilianfeix/tap/proxy-scraper
The formula follows each release within about a day.
Docker, pip, a faster event loop, the latest main, tab completion and where state and results are stored: every other way to install.
Started without arguments, a wizard asks what you are looking for – a preset (find everything, browsing, maximum anonymity, fast, a few right now, recheck, proxy server right away, …) or step by step: the wizard and its presets.
Keys: ↑↓ select · Space toggle · 1–9 jump · Enter next · Esc back · q quit. In scripts and cron jobs the wizard never shows up – pass options or -y.
Check states
Every check of a proxy ends in one of four states. They are in proxies.json, in the CSV, in --pick --json, in --diagnose, in the Python API (result.checks) and in the MCP results.
| State | Meaning |
|---|---|
passed |
The check ran and the proxy did what was asked. |
failed |
The check ran, its target was fine, and the proxy did not do what was asked. |
unavailable |
The check could not run, or says nothing about the proxy: its target didn't answer directly either, there was no reference to compare with, or this machine ran out of sockets. |
skipped |
Left out on purpose: --fast, a filter had already ruled the proxy out, or an earlier check failed. |
Two rules follow from that:
- A check that didn't run is never
passed. Before 1.30, a run without a reachable second target kept every proxy as if it had been confirmed, and a missing reference page looked like "content unchanged". - A check target that is down doesn't fail the proxies checked against it. When a second request, a content request that returned a different page, or an HTTPS test fails, the tool asks the target directly: at most once every 3 seconds however many proxies fail in between, and a "down" answer is reused for 10 seconds. If the target doesn't answer, the proxy's check is
unavailable, notfailed. For the first request a scan does it differently: it watches the target, switches to another one and checks the affected proxies again.--diagnoseand--pick --verifyhave no such watcher and ask directly, as for the later checks. Two things are never asked about, because the target did answer: a second site that saw a different exit IP, and a proxy that could not be connected to in the first place.
The checks, what each passed does and doesn't mean, the fields and every reason code: docs/check-states.md.
For AI agents (MCP)
proxy-scraper-mcp is an MCP server: Claude Code, Claude Desktop, Cursor, VS Code, Codex and any other MCP client can ask for working proxies and load pages through them.
| Tool | What it does |
|---|---|
get_proxies |
proxies from the hourly list, as checked in its last run – filter by protocol, country, HTTPS, elite, no datacenter, not blocklisted, stable, uptime, latency, gets through to Google/Reddit/Amazon |
check_proxies |
checks proxies from your own network, so they work from where your code runs (30–90 s, reports progress) |
fetch_url |
loads a page through a proxy from the checked list, switches proxies by itself when one fails, returns readable text – HTTPS only through proxies that passed the TLS test |
Things to ask your agent: "Load bbc.com/news as seen from the UK", "Give me 5 SOCKS5 proxies from Germany that aren't in a datacenter", "Check which of these sites block free proxies".
Needs uv – it fetches a suitable Python by itself if yours is older than 3.10. Claude Code:
claude mcp add proxy-scraper -- uvx --python ">=3.10" --from "proxy-scraper-cli[mcp]" proxy-scraper-mcp
Claude Desktop, Cursor and most other clients – add this to the MCP config (Claude Desktop: Settings → Developer → Edit Config, Cursor: ~/.cursor/mcp.json):
{
"mcpServers": {
"proxy-scraper": {
"command": "uvx",
"args": ["--python", ">=3.10", "--from", "proxy-scraper-cli[mcp]", "proxy-scraper-mcp"]
}
}
}
VS Code, Codex, Docker, or without uv: setup for every other client. It's also in the official MCP registry as io.github.maximilianfeix/proxy-scraper, so clients that browse the registry can install it from there.
The server tells agents what it tells you: free proxies are run by strangers, so no logins, cookies or personal data through them. Local and private addresses are refused, and results go to proxy-scraper's data folder, not into the project you're working in.
Examples
# 50 proxies that can do HTTPS – then stop
proxy-scraper --want 50 --https-only
# only Germany, Austria and Switzerland, the 20,000 most promising candidates
proxy-scraper --country DE,AT,CH -l 20000
# fast elite SOCKS5 proxies
proxy-scraper --types socks5 --anonymity elite --max-latency 1500
# 20 proxies that really reach Google AND Discord
proxy-scraper --target google.com --target discord.com --want 20
# only recheck the last hits (plus history) – takes seconds
proxy-scraper --recheck
# wizard with defaults – it keeps what you already passed
proxy-scraper -i --country DE
# which sources deliver the most?
proxy-scraper --list-sources
Running from a clone? Replace proxy-scraper with python3 proxy_scraper.py.
From Python
from proxyscraper import check_proxies, find_proxies
if __name__ == "__main__": # needed on macOS/Windows, the parser uses a process pool
for p in find_proxies(want=20, https=True, countries=["DE", "NL"], no_datacenter=True):
print(p.url, p.latency, p.country, p.org)
alive = check_proxies(["socks5://1.2.3.4:1080", "5.6.7.8:3128"]) # your own list
Same run as the command line – sources, learning, every check, result files – just without terminal output. Each result has url, latency, exit_ip, https, anonymity, country, asn, org and hosting. There's an async version of both (find_proxies_async, check_proxies_async).
Don't need a fresh scan? live_proxies takes the live list instead – no checks, one download, done in about a second:
import itertools, requests
from proxyscraper import live_proxies
proxies = live_proxies(types=["socks5"], https=True, min_uptime=90) # the reliable ones this week
pool = itertools.cycle(p.url for p in proxies)
r = requests.get("https://api.ipify.org", proxies={"https": next(pool)}, timeout=15) # pip install "requests[socks]"
It filters by types, countries, https, anonymity, max_latency, no_datacenter and no_blocklisted like find_proxies, plus min_uptime, min_speed (KiB/s), works_on (["google"], "reddit", "amazon", "instagram", "tiktok", "discord") and limit. Every result also has uptime_24h, uptime_7d, first_seen, up_for_hours, sites and speed_kbps.
Or let the library do the retrying: ProxyRotator loads a URL through the list and moves on to the next proxy when one fails, and proxy_url() gives requests, httpx, Playwright or Scrapy one local address that rotates behind the scenes – Python API: rotating through the list.
proxy-scraper MCP questions
How do I add proxy-scraper MCP to Claude Code?
Run claude mcp add proxy-scraper -- uvx proxy-scraper-cli in your terminal. Add --scope user to make it available in every project.
How do I add proxy-scraper MCP to Cursor?
Open ~/.cursor/mcp.json and add the server under mcpServers, using the Cursor config shown in the install section above.
How often are the proxy lists updated?
The proxy lists are rebuilt approximately every hour.
How do you ensure the proxies in the list actually work?
Proxies must pass several checks, including a handshake, a second request to an unrelated site to confirm the exit IP, and a content check to ensure data integrity.
Do I need an API key to use these proxies?
No, there is no signup or API key required to access the lists.
Is it safe to use these proxies for sensitive information?
No, you should never use free proxies for logins, payments, or personal data.