VPNDetection

io.vpndetection由 vpndetection.io 發布官方發布者v6.2.6更新於 Nov 6, 2026

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

已驗證Streamable HTTP可網頁執行安全與監控資料與分析

概覽

AI 產生的概覽

VPNDetection 可判斷 IP 位址是否屬於 VPN、代理、Tor、主機代管或 CDN,並提供資料庫目錄與授權狀態查詢。

可以做什麼
  • 對單一 IPv4 或 IPv6 位址分類:VPN、住宅/資料中心/行動/公開代理、Tor 節點、中繼、主機代管商或 CDN,並附上已知的供應商名稱
  • 一次批次分類整份位址清單,結果以位址為鍵回傳
  • 查詢 API 金鑰的權益:方案、欄位層級、已用請求數、額度與重設時間
  • 瀏覽資料庫目錄及各資料庫家族的授權狀態,並檢視欄位資訊、範例列、列數與檔案大小
  • 查詢資料庫檔案的已發布校驗值,並檢視組織近期的下載嘗試紀錄(含被拒紀錄)
適用情境
適合需要判斷流量、註冊或日誌是否來自匿名化基礎設施的情境,也適合用來解釋查詢結果為何缺少某些欄位。在進行大批次查詢前核對方案用量與資料庫授權狀態時同樣實用。
執行需求
可使用 mcp.vpndetection.io 遠端端點並以 OAuth 登入 VPNDetection 帳號,或在本機以 Node.js 22 以上版本執行 npm 套件 vpndetection-mcp。可透過環境變數 VPNDETECTION_API_KEY 提供金鑰;沒有金鑰時查詢只回傳 ip 與 is_vpn,每個來源位址每天上限 1000 次。VPNDETECTION_BASE_URL 可覆寫端點位址。資料庫相關工具需要具備 db.download 權限的金鑰。
安裝前請注意
需要 VPNDetection 帳號,完整欄位需付費方案,用量依訂閱週年而非日曆月計算。結果中缺少的欄位代表方案未包含,而非「查無資料」,因此必須搭配 coverage 資訊解讀。所有工具皆為唯讀,且刻意不提供下載工具,資料庫檔案需另行取得。API 金鑰屬於憑證,應只放在環境變數中,不要外流。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 VPNDetection,將其新增到工作區。
  2. 連接 所需的 憑證。它們會被私密儲存,絕不會在公開頁面上展示。
  3. 為需要使用其工具的對話啟用該服務。

Web executable,透過 Streamable HTTP。 遠端服務在工作區中設定後即可從網頁執行環境執行。

交給代理程式安裝

把這段提示詞貼上到 Claude Code、Codex、Cursor 等代理程式,或 SourceWeft 對話中。代理程式會讀取該伺服器的安裝指南,先向你展示發布者、端點和登入方式,經你同意後再把它新增到你的客戶端。金鑰不會寫進任何命令。

閱讀 https://sourceweft.com/mcp/io.vpndetection%2Fmcp/install.md,並按其中說明把這個 MCP 伺服器接入我的客戶端。修改任何設定之前,先告訴我它的發布者、端點和登入方式,等我確認。不要把 API 金鑰寫進命令或我會提交的檔案;問我金鑰應從哪裡取得。

檢視代理程式所依據的安裝指南

其他 MCP 客戶端

把它新增到你客戶端的 mcpServers 設定中。 客戶端會在首次連接時完成 OAuth 登入。

{
  "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.

來源:README.md,提交 f3dba4c

工具

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.

輸入參數ip必填

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.

輸入參數ips必填

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.

無需輸入參數。

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.

無需輸入參數。

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.

輸入參數dataset_id必填

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`.

輸入參數format必填dataset_id必填

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.

輸入參數limit

版本歷史

8
  1. v6.2.6最新Nov 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

評分

已滿足適用檢查項的 100%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通必需25 分
  • 已宣告認證方式必需10 分
  • 已列出工具15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分

其他 Vpndetection 整合