VPNDetection

io.vpndetectionPublished by vpndetection.ioOfficial publisherv6.2.6Updated Nov 6, 2026

VPN, proxy, Tor, hosting and CDN detection for any IP address, from the VPNDetection API.

VerifiedStreamable HTTPWeb executableSecurity & MonitoringData & Analytics

Overview

AI-generated overview

VPNDetection classifies IP addresses as VPN, proxy, Tor, hosting or CDN, and exposes the provider's database catalog and license status.

What you can do
  • Classify one IPv4 or IPv6 address as VPN, residential, datacenter or mobile proxy, Tor node, relay, hosting provider or CDN, with provider name where known
  • Classify a whole list of addresses in one batched call, keyed by address
  • Check what the API key is entitled to: plan, field tier, requests used, allowance and reset date
  • Browse the database catalog with each family's license standing, plus column metadata, sample rows, row counts and file sizes
  • Look up published checksums for a database file and review the organization's recent download attempts, refusals included
When to use it
Useful when an assistant needs to judge whether traffic, signups or log entries come from anonymizing infrastructure, or to explain why a lookup answer is missing fields. Also handy for checking plan usage and database license status before a large batch.
Requirements
Remote endpoint at mcp.vpndetection.io with OAuth sign-in to a VPNDetection account, or the npm package vpndetection-mcp run locally with Node.js 22 or newer. A key can be supplied as VPNDETECTION_API_KEY; without one, lookups return only ip and is_vpn, up to 1000 a day per source address. VPNDETECTION_BASE_URL overrides the endpoint. Database tools need a key with the db.download scope.
Before you install
Requires a VPNDetection account and, for full fields, a paid plan; usage counts against the subscription anniversary. A field missing from a result means the plan does not include it, not that nothing was found, so results must be read with the coverage block. All tools are read-only and there is no download tool; database files must be fetched separately. The API key is a credential and should be kept in the environment, not shared.

Installation

In SourceWeft

  1. Open VPNDetection in the dashboard and add it to a workspace.
  2. Connect the required credentials. They are stored privately and never shown on public pages.
  3. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/io.vpndetection%2Fmcp/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config. The client completes OAuth sign-in on first connect.

{
  "mcpServers": {
    "vpndetection": {
      "type": "http",
      "url": "https://mcp.vpndetection.io/mcp"
    }
  }
}

README

[VPNDetection] VPNDetection MCP Server

[npm] [license]

The official Model Context Protocol server for the VPNDetection API.

It gives an AI agent seven read-only tools for anonymity detection: whether an address belongs to a VPN, a residential, datacenter, mobile or public proxy, a Tor node, a privacy relay or web gateway, a hosting provider or a CDN, plus the database catalog and where your organization's license for each one stands.

Getting Started

We host it at https://mcp.vpndetection.io/mcp, and you sign in to it with your VPNDetection account. It also runs on your own machine from npm.

In Claude

In claude.ai, the desktop app or Cowork, add https://mcp.vpndetection.io/mcp as a custom connector and choose Use Claude's published identity when asked. In Claude Code, install our plugin, which adds the server with skills:

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

Either way you sign in with your VPNDetection account, and Claude never sees your API key. The steps, the skills and how to disconnect: docs.vpndetection.io/integrations/claude.

In ChatGPT and Codex

In ChatGPT on the web, add https://mcp.vpndetection.io/mcp as a custom MCP server under Plugins and choose OAuth. In Codex, install our plugin, which adds the server with skills:

console
codex plugin marketplace add vpndetection-io/openai-plugincodex plugin add vpndetection@vpndetectioncodex mcp login vpndetection

Either way you sign in with your VPNDetection account, and neither sees your API key. The steps: docs.vpndetection.io/integrations/chatgpt and docs.vpndetection.io/integrations/codex. On the OpenAI API, the Responses API's mcp tool takes the server as its server_url and your key as its authorization.

In any other MCP client

Point it at https://mcp.vpndetection.io/mcp. A client that supports MCP authorization signs in the same way. One that doesn't can send a key instead, as Authorization: Bearer your-key.

On your own machine

No API key needed to start. Without a key, a lookup answers ip and is_vpn, up to 1000 a day per source address. A free key adds Tor and relay detection, where the address is and the AS that announces it, and every paid plan answers every field.

Add this to your MCP client's config:

json
{  "mcpServers": {    "vpndetection": {      "command": "npx",      "args": ["-y", "vpndetection-mcp"]    }  }}

Requires Node.js 22 or newer.

A key unlocks the provider name, the classification databases and the proxy families. Put it in the environment:

json
{  "mcpServers": {    "vpndetection": {      "command": "npx",      "args": ["-y", "vpndetection-mcp"],      "env": { "VPNDETECTION_API_KEY": "your-key" }    }  }}

VPNDETECTION_BASE_URL overrides the endpoint if you need to point somewhere else.

Tools

ToolWhat it answers
lookup_ipClassify one address.
lookup_ipsClassify a whole list of addresses in one call, keyed by address. A long list is batched for you.
my_entitlementWhat this key is entitled to and what it has spent: plan, field tier, requests so far, allowance, and when it resets.
list_databasesEvery database we publish, with its standing for your organization: licensed, expired or unlicensed.
database_metadataA database's columns, sample rows, row count, build date and file sizes.
database_checksumThe published digests for one database file.
list_downloadsYour organization's recent download attempts, refusals included.

The database tools need a key with the db.download scope, which your organization's Default key has.

Every tool is read-only. There is deliberately no download tool: the databases run to several GB, which is not something an agent should pull into a conversation. Fetch them with the client libraries or the API instead.

There is deliberately no my_ip tool, although every client library has one. Over a hosted transport the address our edge observes belongs to whatever proxied the call - Claude's infrastructure, not the person asking - so the tool would answer confidently and wrongly for the only reading anyone would put on it. my_entitlement has no such problem and is the same answer from any transport, because it describes the credential rather than the connection. A test pins the tool's absence so it cannot be added back by accident.

Usage counts against the anniversary of the subscription, not the calendar month and not the billing period. A null hard_limit means we never stop serving; it is not a limit of zero.

Reading a result

Each lookup comes back with a coverage block beside it:

json
{  "result": { "ip": "45.83.91.1", "is_vpn": true },  "coverage": {    "included": ["ip", "is_vpn"],    "not_included": ["is_hosting", "is_tor", "hosting", "tor", "..."],    "note": "The fields in not_included were not returned, because this API key's plan does not include them. ..."  }}

This matters more here than in a normal client library. A field missing from a result means your plan doesn't include it, never "we checked and found nothing" - and a model reading the result on its own will otherwise treat the absence as a negative answer. coverage states the difference explicitly so it can't.

Other Libraries

There are official VPNDetection client libraries available for many languages including PHP, Python, Go, Java, Ruby, and many popular frameworks such as Django, Rails, and Laravel. See our GitHub at https://github.com/vpndetection-io for more.

About VPNDetection

VPN Detection API: Accurate anonymity detection identifying VPNs, residential proxies, hosting servers, Tor nodes, CDNs, relays and more.

[VPNDetection]

License

This project is licensed under the MIT License.

Source: README.md at commit f3dba4c

Tools

7

lookup_ip

Look up an IP address

Classify a single IPv4 or IPv6 address: whether it belongs to a VPN, a residential, datacenter, mobile or public proxy, a Tor node, a privacy relay or web gateway, a hosting provider or a CDN, with the provider name where we have one. Private and reserved addresses are answered locally, without calling the API. Always read `coverage.note` before concluding anything from a field that is not in the result.

Parametersiprequired

lookup_ips

Look up several IP addresses

Classify a list of addresses in one call, returning a map keyed by address so duplicates collapse and the order you passed them stops mattering. Pass the whole list rather than splitting it yourself: a long one is batched for you. Prefer this over repeated `lookup_ip` calls when you already have the list, for example when triaging a log file. An address that fails carries its error in place of a result rather than failing the batch. Always read `coverage.note` before concluding anything from a field that is not in the result.

Parametersipsrequired

my_entitlement

Plan and usage for this key

What this API key is entitled to and how much of it has been used: the plan, the field tier that decides how much of a lookup answer comes back, the requests counted so far, the allowance, and when it resets. Use it to explain why a field is missing from a lookup, or before a large batch. Usage counts against the anniversary of the subscription rather than the calendar month, and can lag a few seconds behind. A null `hard_limit` means we never stop serving - it is NOT a limit of zero.

Takes no parameters.

list_databases

List databases

The database catalog as this API key's organization may see it, one entry per database FAMILY, with `standing` saying where their license stands: `licensed` if the family is theirs today, `expired` if the term has ended, `unlicensed` if it is published but has never been bought. Each entry has a `base` ID, which is what the license names, and a `versions` array whose `id` is what the other database tools take - pass `versions[].id` (`cdn_ip_v1`), never the `base` (`cdn_ip`). Ask again rather than holding on to this: it is answered per key and is not the same for everyone.

Takes no parameters.

database_metadata

Describe a database

What is inside one database before you fetch it: the columns in each published format with their types, a few sample rows, the row count, the build date and the file sizes. Use this to answer questions about what a database contains without downloading it - the files reach several GB - and to budget a transfer before starting one.

Parametersdataset_idrequired

database_checksum

Get a database's checksums

The published digests for one database file, for verifying a copy you already hold or deciding whether a build has changed since you last fetched it. It is licensed like the download itself, so a database this key cannot download is refused here too. Looking up a checksum is not a download and does not appear in `list_downloads`.

Parametersformatrequireddataset_idrequired

list_downloads

List recent download attempts

This organization's own recent download attempts, newest first, REFUSALS INCLUDED - a denial carries the `outcome` and `http_status` that answer "it stopped working", which nothing else here can. Use it to explain a failing fetch, to confirm a transfer ran, or to check whether a request was theirs. This is a bounded WINDOW of at most 200 rows, so a database missing from the answer means it is not in this window - never that it was never downloaded.

Parameterslimit

Version history

8
  1. v6.2.6LatestNov 5, 2026
  2. v6.2.5Nov 4, 2026
  3. v6.2.4Nov 3, 2026
  4. v6.2.2Oct 30, 2026
  5. v6.2.1Oct 26, 2026
  6. v6.2.0Oct 20, 2026
  7. v6.1.4Oct 19, 2026
  8. v6.1.2Oct 19, 2026

Score

100% 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 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listed15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts

Other Vpndetection integrations