Skip to main content
Glama

proxy-finder-mcp

npm version CI Release license

An MCP (Model Context Protocol) server that finds and validates working free HTTP/HTTPS/SOCKS proxies, optionally filtered by country. Built for agents that need to route a request or curl through a specific country — a geo-blocked municipal site, a region-locked API, or just debugging why a request fails from one network but not another.

It aggregates three free proxy-list sources (ProxyScrape, Proxifly, Geonode), merges and dedupes them, and actually tests candidates live (not just trusting self-reported uptime) before handing one back — with a local disk cache so repeat calls don't re-scrape or re-test everything from scratch.

Pure TypeScript, zero external process dependencies (no curl/ffmpeg/etc. required) — works anywhere Node.js does, install-free via npx.

Install

No install step needed — run it directly with npx. Add it to your MCP client's config:

Claude Code

claude mcp add proxy-finder -- npx -y proxy-finder-mcp

Claude Desktop / other JSON-config clients

Add to your MCP config file (e.g. claude_desktop_config.json):

{
  "mcpServers": {
    "proxy-finder": {
      "command": "npx",
      "args": ["-y", "proxy-finder-mcp"]
    }
  }
}

Cursor

Add to .cursor/mcp.json:

{
  "mcpServers": {
    "proxy-finder": {
      "command": "npx",
      "args": ["-y", "proxy-finder-mcp"]
    }
  }
}

Google Antigravity

Open the Manage MCP Servers panel (Command Palette → "MCP") and add a new server, or edit its mcp_config.json directly with the same mcpServers block used above:

{
  "mcpServers": {
    "proxy-finder": {
      "command": "npx",
      "args": ["-y", "proxy-finder-mcp"]
    }
  }
}

Related MCP server: klawfetch

Tools

Tool

Description

find_proxy

Finds a live, validated proxy, optionally filtered by country and/or protocol. Tests a batch of candidates concurrently and returns the fastest working one, plus a few backups.

check_proxy

Validates one specific proxy string (e.g. socks5://1.2.3.4:1080) against a target URL — useful for re-checking a proxy against the exact site you need.

list_proxies

Lists merged/deduped/ranked candidates without live-testing — fast, cache-aware.

list_countries

Lists which countries are currently covered by the proxy pool, with counts, so you know what to ask find_proxy for.

find_proxy parameters

Param

Type

Default

Description

country

string

—

ISO alpha-2 code ("FR") or full name ("France"). Omit for any country.

protocol

http | https | socks4 | socks5 | any

any

Restrict to a proxy protocol.

testUrl

string

https://httpbin.org/ip

Validate candidates against this URL instead — e.g. the site your curl just failed against.

timeoutMs

number

4000

Per-proxy check timeout.

maxCandidates

number

25

How many ranked candidates to live-test.

concurrency

number

10

How many checks to run in parallel.

forceRefresh

boolean

false

Bypass the cached proxy list and re-fetch all sources.

Example

"I need a working proxy in France to check if this site is geo-blocked."

The agent calls find_proxy with { "country": "FR" } and gets back something like:

{
  "found": true,
  "proxy": {
    "proxy": "socks4://31.59.234.26:40001",
    "ip": "31.59.234.26",
    "port": 40001,
    "protocol": "socks4",
    "countryCode": "FR",
    "city": "Amiens",
    "latencyMs": 1918,
    "statusCode": 200,
    "testUrl": "https://httpbin.org/ip"
  },
  "alternates": [ ... ],
  "testedCount": 25,
  "candidatePoolSize": 225
}

How it works

  1. Sources — ProxyScrape v4, Proxifly's static list, and Geonode's proxy-list API are fetched concurrently and merged, deduped by ip:port. The merged list is cached on disk for 10 minutes so repeat tool calls don't hammer any source.

  2. Ranking — before live-testing, candidates are sorted cache-first: previously-confirmed fast proxies come first (fastest first), then untested proxies (best self-reported uptime/speed first), then previously-failed proxies last.

  3. Validation — a capped, concurrency-bounded batch of ranked candidates is dialed for real (via axios + https-proxy-agent/socks-proxy-agent — no shelling out to curl) against a target URL. Success = the request completes with an HTTP status in [200, 400).

  4. Caching — every tested proxy's result (success and failure) is written to ~/.proxy-finder-mcp/health.json with a timestamp, so later calls skip re-testing recently confirmed-fast or confirmed-dead proxies.

Local development

git clone https://github.com/shakthizen/proxy-finder-mcp.git
cd proxy-finder-mcp
npm install
npm run build
npm run typecheck
npm run lint
npm test
node dist/index.js   # runs the server over stdio

License

MIT © shakthizen

Available Tools

4 tools
check_proxyCheck a specific proxyA

Validates a single specific proxy (e.g. "socks5://1.2.3.4:1080" or "http://1.2.3.4:8080") by making a real request through it to a target URL. Use this to test a proxy you already have, or to re-check whether a specific site works through a given proxy after find_proxy returned it.

ParametersJSON Schema
NameRequiredDescriptionDefault
proxyYesFull proxy URL to validate, e.g. "socks5://1.2.3.4:1080" or "http://1.2.3.4:8080".
testUrlNoURL to validate against. Defaults to a generic IP-echo endpoint.
timeoutMsNoCheck timeout in ms. Default 4000.

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations, so the description carries the full burden. It usefully discloses that the check performs a real network request through the proxy (not a mock), which implies latency and network egress, but says nothing about failure semantics, whether it throws or returns a status, or what the result contains. This is meaningful but incomplete disclosure for a validation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no filler. The core purpose and mechanism come first, with the when-to-use guidance following immediately.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and no annotations, the description should at least hint at what a successful/failed validation returns (boolean, latency, error detail). It covers inputs and usage well but leaves the result shape and failure behavior unstated, which is a real gap for a check tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all three parameters (proxy, testUrl, timeoutMs) are already documented with defaults and constraints in the schema. The description's example URL format duplicates the schema rather than adding new semantics, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (validates) and resource (single specific proxy), and explains the mechanism ('by making a real request through it to a target URL'). Example proxy URLs make the expected input format concrete and clearly distinguish it from find_proxy/list_proxies.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly names two use cases — testing a proxy you already have, and re-checking a specific site through a proxy that find_proxy returned. The alternative tool is named and the selection condition is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

find_proxyFind a working proxyA

Finds a live, validated free proxy, optionally filtered by country and/or protocol. Tests a batch of candidates concurrently against a target URL and returns the fastest one that actually works, plus a few backups. Use this when a direct request/curl is geo-blocked or otherwise failing and you need a working proxy to route through.

ParametersJSON Schema
NameRequiredDescriptionDefault
countryNoISO 3166-1 alpha-2 country code (e.g. "FR") or full country name (e.g. "France"). Omit for any country.
testUrlNoURL to validate candidates against. Defaults to a generic IP-echo endpoint; pass the site you actually need to reach (e.g. the one your curl just failed against) for a more relevant check.
protocolNoProxy protocol to filter by, or "any" for no filter.
timeoutMsNoPer-proxy check timeout in ms. Default 4000.
concurrencyNoMax concurrent checks. Default 10.
forceRefreshNoBypass the cached proxy list and re-fetch all sources.
maxCandidatesNoMax candidates to live-test. Default 25.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does reasonably well: it discloses concurrent batch testing against a target URL, that it returns the fastest working proxy plus backups, and (via forceRefresh/'cached proxy list') that a cache exists. It omits rate limits, timeout/failure behavior on no match, and whether network egress occurs, keeping it from a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the core action, followed by mechanics, then usage condition. Every sentence adds distinct value with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-param tool with no output schema, the description covers purpose, selection behavior, and return shape ('fastest one that actually works, plus a few backups'). It lacks guidance on no-match outcomes and the cache's behavioral implications, minor gaps that keep it from 5.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all 7 parameters with defaults and bounds. The description adds no syntax or format detail beyond what the schema provides, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Finds a live, validated free proxy') with scope ('optionally filtered by country and/or protocol') and contrasts implicitly with siblings like check_proxy or list_proxies by emphasizing validated-and-working selection. An agent can distinguish this as the search-and-validate tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete when-to-use guidance: 'when a direct request/curl is geo-blocked or otherwise failing and you need a working proxy to route through.' It does not name sibling alternatives (check_proxy vs list_proxies) to route away, so it falls short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_countriesList available countriesA

Lists the countries currently covered by the merged proxy pool, with a proxy count per country. Use this to discover what country codes are worth passing to find_proxy before asking for one.

ParametersJSON Schema
NameRequiredDescriptionDefault
forceRefreshNoBypass the cached proxy list and re-fetch all sources.

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It discloses the data source (merged proxy pool) and that results reflect currently covered countries, but says nothing about caching or freshness — the cache/refresh behavior is only visible in the forceRefresh parameter schema, not the description.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences, zero waste, with the core behavior front-loaded before the usage routing. Nothing is padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Though there is no output schema, the description explains the return shape (countries with per-country proxy counts), which is what an agent needs. The only omission is the freshness/caching dimension that forceRefresh hints at.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only one parameter and schema description coverage is 100%, so the schema already documents forceRefresh fully. The description adds no information about the parameter, which is acceptable given the baseline for high coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Lists the countries') plus the scope ('currently covered by the merged proxy pool') and the return shape (a proxy count per country). This clearly distinguishes it from find_proxy, check_proxy, and list_proxies.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes the agent: use this to discover country codes worth passing to find_proxy 'before asking for one.' Names the alternative sibling and the ordering condition that selects it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_proxiesList candidate proxiesA

Lists merged, deduped proxies from all sources, optionally filtered by country/protocol, ranked cache-first (previously confirmed-fast proxies first). Does not perform any live network testing, so it is fast; use find_proxy when you need a proxy that is actually confirmed working right now.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results to return. Default 50.
countryNoISO 3166-1 alpha-2 country code or full country name. Omit for any country.
protocolNoProxy protocol to filter by, or "any" for no filter.
forceRefreshNoBypass the cached proxy list and re-fetch all sources.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden, and it does well: it discloses that no live network testing occurs, that results are merged/deduped across sources, and that ordering is cache-first with previously confirmed-fast proxies prioritized. It does not cover result freshness/staleness beyond forceRefresh or any rate limits, leaving modest gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero filler, and the core behavior plus ordering rule is front-loaded before the routing hint. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list tool with full schema coverage and no output schema, the description covers behavior, ordering, and sibling routing adequately. Only minor gaps remain, such as what a returned entry contains or how stale the cache can be.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all four parameters (limit, country, protocol, forceRefresh) are already documented in the schema. The description only echoes the country/protocol filtering, adding no format or interaction detail beyond what structured data provides. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Lists merged, deduped proxies from all sources') plus scope details (country/protocol filtering, cache-first ordering). An agent can distinguish it from find_proxy and check_proxy purely from the text.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly names the alternative and the selecting condition: 'use find_proxy when you need a proxy that is actually confirmed working right now.' It also clarifies what this tool does not do (no live testing), which is the key routing signal.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 4 tool updatesv0.1.2
    • First observedcheck_proxy
    • First observedfind_proxy
    • First observedlist_countries
    • First observedlist_proxies

TDQS

A4.3/5.0

Scored across 4 tools

Disambiguation5/5

Each tool has a clearly distinct role: find_proxy discovers and live-tests proxies, check_proxy validates one specific proxy, list_proxies returns cached listings without live testing, and list_countries enumerates coverage. The descriptions explicitly guide when to use find_proxy versus list_proxies or check_proxy, eliminating overlap.

Naming Consistency4/5

All names follow a consistent snake_case verb_noun pattern (find/check/list + resource). The only minor deviation is list_proxies using plural while find_proxy and check_proxy use singular, but this is natural and predictable.

Tool Count5/5

Four tools are well-scoped for a proxy-finding service: discovery, validation, listing, and country lookup. Each tool earns its place and none feels redundant or excessive.

Completeness4/5

The toolset covers the core discover-validate-list lifecycle for proxies and provides country enumeration. Minor gaps like detailed proxy metadata (e.g., response times, source) or a batch validation tool exist, but agents can work around them.

Maintenance

ActivityNo data
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    A geo-distributed HTTP proxy for AI agents, enabling web fetching from multiple global regions (Frankfurt, Sydney, New York, San Francisco) with support for screenshots, scraping, and JS rendering.
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables agents to autonomously route traffic through real 4G/5G mobile and residential IPs by country, with tools to check live proxy stock, obtain ready-to-use proxy URLs, and monitor remaining data usage.
    44 npm
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Routes AI agent HTTP requests through residential proxies to bypass anti-bot systems, geo-target by country/city, and maintain sticky sessions across multi-step workflows.
    18 npm
    1
    MIT