Skip to content
VPNDetection

Check signups for VPNs and proxies in Claude

Hand Claude a signup export and ask which accounts came from proxies or Tor: the VPNDetection plugin in Claude Code and claude.ai, run on real addresses.

Published 7 min read

On this page
  1. Install it
  2. In claude.ai, the desktop app and Cowork
  3. In Claude Code
  4. What signing in sends
  5. Screening a signup export
  6. When your plan doesn't cover a field
  7. Your databases
  8. Counting over a download
  9. Other assistants

You have yesterday's signups in a CSV, and you want to know which accounts came through a residential proxy, a VPN or Tor, without writing a script. The VPNDetection plugin for Claude gives Claude our API as tools, and four skills that tell it how to use them, so the answer comes back as a table of accounts rather than a list of addresses. We ran every question below in Claude Code 2.1.303, with the plugin's 1.2.1 skills and Claude Sonnet 5.5, against the live server on October 24, 2026. Claude's answers are quoted as it gave them, with the home and proxy addresses withheld. claude.ai and the desktop app connect to the same server; we didn't run them, so their steps below follow Anthropic's guide to custom connectors.

Install it

In claude.ai, the desktop app and Cowork

Go to Customize > Connectors, click + Add, then Add custom connector. Name it VPNDetection, enter our server's URL and click Continue, then Continue again past the authentication settings Claude detected:

https://mcp.vpndetection.io/mcp

Under Authentication choose Sign in now, and under OAuth client choose Use Claude's published identity: there's no client ID or secret to enter. Click Add, sign in with your VPNDetection account, pick which of your organization's API keys Claude should use, and approve. Then turn it on for a chat under + > Connectors.

Custom connectors work on every Claude plan; Free allows one. On a Team or Enterprise plan, an Owner adds it once under Organization settings > Connectors, through Add and Custom > Web, and each member then connects with their own account. A connector brings the tools alone. The skills come with the plugin.

In Claude Code

/plugin marketplace add vpndetection-io/claude-plugin
/plugin install vpndetection@vpndetection

The first time one of its tools runs, Claude Code asks you to sign in. On a machine where nobody can, such as a CI runner, it takes an API key in a header instead:

bash
claude mcp add --scope user --transport http \
  vpndetection https://mcp.vpndetection.io/mcp \
  --header "Authorization: Bearer $VPNDETECTION_API_KEY"

The runs below connected with a key that way, since nobody was at the sign-in screen.

What signing in sends

You sign in with your VPNDetection account and pick one of your organization's API keys. Approving needs permission to share that organization's keys, and asks you to confirm it's you. Claude never sees the key: our server uses it on your behalf, so every lookup counts against that key's plan like any other API call. Claude sends us the IP addresses and database ids you ask about.

To disconnect, remove Claude under Settings > Sessions & devices > Connected applications in the console. Access ends within about a minute.

Screening a signup export

Our test export, signups.csv, has 13 rows with the columns user_id, email, created_at and signup_ip. The accounts are made up and the addresses are real: five home broadband lines, three residential proxy exits, one Mullvad server shared by two accounts, a Tor exit from the Tor Project's list, an iCloud Private Relay address and an AWS server. We've withheld the home and proxy addresses, since each is someone's home connection.

We asked: "Here's yesterday's signup export, signups.csv. Which accounts came from proxies or Tor?" Claude loaded the plugin's review-traffic skill, read the file, and looked up its 12 distinct addresses in one lookup_ips call. It answered:

Four of the 13 accounts came from proxies or Tor. Three (10485–10487) are on a residential proxy network and one (10490) is on a Tor node. Four more are flagged for other anonymization (2 VPN, 1 AWS hosting, 1 Apple Private Relay), and 5 are clean. Of the 13 signups, 4 came through a proxy or Tor, and 4 more came through a VPN, a hosting range or a privacy relay. The check had full coverage, so a "no" below means that category was checked and came back clean.

Proxies or Tor

user_idemailsignup time (UTC)IPCategoryProviderCountry / network
10485sam.k.0412@example.net13:41(withheld)Residential proxyNovadaBrazil, Jsm da Silva me (AS271124)
10486sam.k.0413@example.net13:42(withheld)Residential proxyNovadaChile, Telefónica Chile (AS7418)
10487sam.k.0414@example.net13:44(withheld)Residential proxyNovadaBrazil, V tal (AS7738)
10490noor.haddad@example.com18:09190.120.229.98Tor exit node (also flagged as hosting, medium confidence)–Peru, Sondatech (AS263812)

Other anonymization

user_idemailIPCategoryProviderCountry / network
10482k.osei@example.net45.134.140.130VPN and hostingMullvad, on DatacampUS, Datacamp (AS212238)
10489t.okafor@example.org45.134.140.130VPN and hostingMullvad, on DatacampUS, Datacamp (AS212238)
10484lena.fischer@example.com172.224.236.1Privacy relayApple Private RelayUS, Akamai (AS36183)
10491build-bot@example.io34.192.18.44HostingAWSUS, Amazon (AS14618)

Counts by category (records can be in more than one)

  • Residential proxy: 3
  • Tor: 1
  • VPN: 2
  • Hosting: 4
  • Privacy relay: 1
  • Mobile proxy, datacenter proxy, public proxy and CDN: 0 each
  • Clean: 5 (10480, 10481, 10483, 10488 and 10492, all Comcast US home connections)

It went on to read the three sam.k accounts as probably one person: sequential email names, signed up within about 3 minutes, each on a different Novada address in Brazil or Chile. It said the two accounts behind one Mullvad exit, about 7¾ hours apart, aren't tied together by that alone, since Mullvad's exits are shared, that the Private Relay signup is usually an ordinary user with a privacy setting on, and that build-bot on AWS is probably automation. It closed by saying a flag shows the network is anonymized, not that the person is acting in bad faith, and offered the full joined table as a CSV.

The three sam.k accounts each came from a different address, in two countries. Checked one address at a time, they're three unrelated proxy hits; kept on their accounts, they're one burst. That's what the review-traffic skill adds, and since version 1.2.0 it gives each record's country and network from the same lookup. Private Relay is the one flag it said to weigh lightly, and our Private Relay post explains why it's rarely worth blocking at signup.

When your plan doesn't cover a field

Each lookup comes back with a coverage block: the fields the key's plan includes, the fields it doesn't, and a note that a missing field was never checked. With only ip and is_vpn covered, which is what a lookup without a key answers, the same question's answer opened with:

I can't tell you which accounts came from proxies or Tor. The lookup only checked for VPNs.

The API key's plan returns just is_vpn. The Tor, residential, mobile, datacenter and public-proxy flags, plus hosting, relay, CDN, location and network data, were not checked. A missing flag doesn't mean an address is clean.

It still flagged the two accounts on the Mullvad server, and said the sam.k burst could be one person rotating proxies, which this lookup couldn't confirm. Where it guessed from its own knowledge that two addresses looked like a privacy relay and a cloud host, it said so and called it a guess, not a result. The note is in the tool's result, not only in the skill, so Claude reads it in claude.ai too. With every field covered, the first answer said the opposite: a "no" there meant the category "was checked and came back clean."

Your databases

The plugin also answers questions about the downloadable databases. Its database tools need a key with the db.download scope, which your organization's Default key has. We asked "Which databases are we licensed for, and how big is the latest VPN build?" Claude loaded the database-files skill, listed the catalog and answered:

Licensed databases: you hold three, all Open databases on the standard license, which started 2026-10-20 and has no expiry date.

FamilyWhat it coversVersionFormats
tor_ipTor node IP rangestor_ip_v1csvgz, mmdb
relay_ipPrivacy relays (e.g. iCloud Private Relay) and enterprise web gateways (e.g. Zscaler)relay_ip_v1csvgz, mmdb
relay_providerProvider catalog referenced by Relay IPrelay_provider_v1csvgz

Open databases are free under CC BY-SA 4.0. You have to credit VPNDetection and share anything you build from them under the same license. Every other family is unlicensed, meaning it has never been bought. None are expired.

Every organization holds those three from the start, a free one included: they were 3 of the 37 families the catalog listed. For the VPN build it read each database's metadata, which any key can read. VPN IP (vpn_ip_v1), built October 24, has 12,551,040 entries, 90.8 MB as csvgz and 79.2 MB as mmdb. VPN IP Extended's October 23 build has 13,290,002, at 99.6 MB and 130.3 MB.

Counting over a download

In Claude Code the analyze-database skill goes further: it downloads a copy with the vpndetection CLI, which checks the file's checksum, and counts over it locally with whatever you have, whether that's duckdb, sqlite or pandas. The Open databases make that a step any account can run. We asked "Download our Tor IP database and count its ranges by confidence, IPv4 and IPv6 separately." Claude read the Tor IP metadata, ran vpndetection db download tor_ip_v1, and, with no duckdb on our machine, wrote a short Python script to count the file:

I downloaded tor_ip_v1 (the Tor IP database, built 2026-10-24) and counted its ranges. The file was 108.5 KB and passed the SHA-256 check. The counts add up to the 13,218 rows the metadata reports.

FamilyConfidenceRanges
IPv4high10,465
IPv4medium0
IPv6high2,590
IPv6medium163
IPv4 total10,465
IPv6 total2,753

We counted the same file ourselves and got the same numbers. The CLI has to be signed in first (vpndetection login); our run gave it a key in VPNDETECTION_API_KEY instead. Claude Code asks before each command it runs, and we'd allowed vpndetection and python3 ahead of time.

Other assistants

ChatGPT, Codex and any other MCP client connect to the same server: the MCP docs cover them, and our Claude page has the setup above. A free key adds the Tor fields and every paid plan the proxy fields, as our pricing page shows, and the API answers the same lookups from your own code.

Written by

  • Uman Shahzad

    Founder & CEO

    IP intelligence data expert for over 8 years, former lead engineer at IPinfo, Uman has pioneered many systems and practices used by IP data companies to operate at scale, provide high-quality data and offer the best developer experiences.

Get new posts by email

Or follow along in a feed reader.

RSS feed

Try it on your own traffic.

The detection these posts describe is one API call away, with SDKs for every major language.

00 · No key

Start without signing up.

Paste it into a terminal. No account needed. 1,000 lookups a day per address, answering ip and is_vpn.

curl "https://api.vpndetection.io/146.70.116.130"
{
"ip": "146.70.116.130",
"is_vpn": true
}
01 · Free key

Sign up and get 50,000 requests a month.

No card and no sales call: the key is issued on signup.
Every request flags VPN IPs.
Upgrade only when you outgrow the allowance.