vpndetection-mcp 1.0.1 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -6
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/tools.d.ts +3 -1
- package/dist/tools.js +78 -24
- package/dist/tools.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
|
|
6
6
|
The official [Model Context Protocol](https://modelcontextprotocol.io) server for the [VPNDetection](https://vpndetection.io) API.
|
|
7
7
|
|
|
8
|
-
It gives an AI agent
|
|
8
|
+
It gives an AI agent six read-only tools for anonymity detection: whether an address belongs to a VPN, a residential, datacenter or mobile proxy, a Tor node, a public relay, a hosting provider or a CDN, plus the catalogue of databases your organization is licensed to download.
|
|
9
9
|
|
|
10
10
|
## Getting Started
|
|
11
11
|
|
|
@@ -30,7 +30,7 @@ Requires Node.js 22 or newer.
|
|
|
30
30
|
|
|
31
31
|
### With an API key
|
|
32
32
|
|
|
33
|
-
A key unlocks the provider name, the classification
|
|
33
|
+
A key unlocks the provider name, the classification databases and the proxy families. Put it in the environment:
|
|
34
34
|
|
|
35
35
|
```json
|
|
36
36
|
{
|
|
@@ -52,11 +52,12 @@ A key unlocks the provider name, the classification datasets and the proxy famil
|
|
|
52
52
|
|---|---|
|
|
53
53
|
| `lookup_ip` | Classify one address. |
|
|
54
54
|
| `lookup_ips` | Classify up to 100 addresses in one call, keyed by address. |
|
|
55
|
-
| `list_databases` | The
|
|
56
|
-
| `database_metadata` | A
|
|
57
|
-
| `database_checksum` | The published digests for one
|
|
55
|
+
| `list_databases` | The databases your organization is licensed for. |
|
|
56
|
+
| `database_metadata` | A database's columns, sample rows, row count, build date and file sizes. |
|
|
57
|
+
| `database_checksum` | The published digests for one database file. |
|
|
58
|
+
| `list_downloads` | Your organization's recent download attempts, refusals included. |
|
|
58
59
|
|
|
59
|
-
Every tool is read-only. There is deliberately no download tool: the
|
|
60
|
+
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](https://github.com/vpndetection-io) or the API instead.
|
|
60
61
|
|
|
61
62
|
## Reading a result
|
|
62
63
|
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { createTools, registerTools, BATCH_LIMIT } from './tools.js';
|
|
1
|
+
export { createTools, registerTools, BATCH_LIMIT, DOWNLOADS_LIMIT } from './tools.js';
|
|
2
2
|
export type { ToolContext, ToolDef } from './tools.js';
|
|
3
3
|
export { coverageOf, batchCoverage, COVERAGE_SCHEMA } from './coverage.js';
|
|
4
4
|
export type { Coverage } from './coverage.js';
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { createTools, registerTools, BATCH_LIMIT } from './tools.js';
|
|
1
|
+
export { createTools, registerTools, BATCH_LIMIT, DOWNLOADS_LIMIT } from './tools.js';
|
|
2
2
|
export { coverageOf, batchCoverage, COVERAGE_SCHEMA } from './coverage.js';
|
|
3
3
|
export { LOOKUP_MEMBERS, LOOKUP_GATED_MEMBERS, SPEC_VERSION } from './schema.gen.js';
|
|
4
4
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAEtF,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAE3E,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC"}
|
package/dist/tools.d.ts
CHANGED
|
@@ -3,10 +3,12 @@ import type { CallToolResult, Tool } from '@modelcontextprotocol/sdk/types.js';
|
|
|
3
3
|
import type { VPNDetection } from 'vpndetection';
|
|
4
4
|
/** The most addresses one `lookup_ips` call may carry. */
|
|
5
5
|
export declare const BATCH_LIMIT = 100;
|
|
6
|
+
/** The most history rows one `list_downloads` call may ask for. The API clamps to the same. */
|
|
7
|
+
export declare const DOWNLOADS_LIMIT = 200;
|
|
6
8
|
export interface ToolContext {
|
|
7
9
|
client: VPNDetection;
|
|
8
10
|
/**
|
|
9
|
-
* Whether to offer the
|
|
11
|
+
* Whether to offer the database tools. On by default: a key without the
|
|
10
12
|
* `db.download` scope gets a plain refusal from the API, which reads better
|
|
11
13
|
* than a tool that silently does not exist, and deciding otherwise would
|
|
12
14
|
* mean re-validating the key here against a policy `db_dl_api` owns.
|
package/dist/tools.js
CHANGED
|
@@ -4,6 +4,16 @@ import { batchCoverage, COVERAGE_SCHEMA, coverageOf, wireBody } from './coverage
|
|
|
4
4
|
import { DATASET_METADATA_SCHEMA, LICENSED_DATASET_SCHEMA, LOOKUP_RESULT_SCHEMA, } from './schema.gen.js';
|
|
5
5
|
/** The most addresses one `lookup_ips` call may carry. */
|
|
6
6
|
export const BATCH_LIMIT = 100;
|
|
7
|
+
/** The most history rows one `list_downloads` call may ask for. The API clamps to the same. */
|
|
8
|
+
export const DOWNLOADS_LIMIT = 200;
|
|
9
|
+
// Both spellings of a database id, stated wherever one is taken. `list_databases`
|
|
10
|
+
// answers a `base` id (what a licence names) and a `versions[].id`; everything
|
|
11
|
+
// else accepts only the versioned one. A model that has just read
|
|
12
|
+
// `base: "cdn_ip"` will otherwise pass it and get a refusal that reads like a
|
|
13
|
+
// bad database rather than a wrong spelling.
|
|
14
|
+
const VERSIONED_ID = 'A VERSIONED database id, from `versions[].id` in `list_databases` - '
|
|
15
|
+
+ '`cdn_ip_v1`, not `cdn_ip`. The unversioned base id is a licence reference and is '
|
|
16
|
+
+ 'not accepted here.';
|
|
7
17
|
/**
|
|
8
18
|
* The tool manifest, and the single place either transport gets it from.
|
|
9
19
|
*
|
|
@@ -130,38 +140,46 @@ function databaseTools(ctx) {
|
|
|
130
140
|
{
|
|
131
141
|
tool: {
|
|
132
142
|
name: 'list_databases',
|
|
133
|
-
title: 'List
|
|
134
|
-
description: 'The
|
|
135
|
-
+ 'with the licence type and term. A
|
|
136
|
-
+ '
|
|
137
|
-
+ 'licence names, and a `versions` array whose
|
|
138
|
-
+ 'tools take - pass `versions[].id`
|
|
139
|
-
+ '(`cdn_ip`).'
|
|
143
|
+
title: 'List databases',
|
|
144
|
+
description: 'The database catalog as this API key\'s organization may see it, '
|
|
145
|
+
+ 'one entry per database FAMILY, with the licence type and term. A database '
|
|
146
|
+
+ 'absent from this list is one the organization does not hold. Each entry has '
|
|
147
|
+
+ 'a `base` id, which is what the licence names, and a `versions` array whose '
|
|
148
|
+
+ '`id` is what the other database tools take - pass `versions[].id` '
|
|
149
|
+
+ '(`cdn_ip_v1`), never the `base` (`cdn_ip`). Ask again rather than holding '
|
|
150
|
+
+ 'on to this: it is answered per key and is not the same for everyone.',
|
|
140
151
|
inputSchema: { type: 'object', additionalProperties: false },
|
|
141
152
|
outputSchema: objectSchema({
|
|
142
|
-
|
|
143
|
-
}, ['
|
|
144
|
-
annotations: {
|
|
153
|
+
databases: { type: 'array', items: LICENSED_DATASET_SCHEMA },
|
|
154
|
+
}, ['databases']),
|
|
155
|
+
annotations: {
|
|
156
|
+
readOnlyHint: true,
|
|
157
|
+
idempotentHint: true,
|
|
158
|
+
openWorldHint: true,
|
|
159
|
+
},
|
|
145
160
|
},
|
|
146
161
|
handler: async () => {
|
|
147
|
-
return ok({
|
|
162
|
+
return ok({ databases: await ctx.client.database.list() });
|
|
148
163
|
},
|
|
149
164
|
},
|
|
150
165
|
{
|
|
151
166
|
tool: {
|
|
152
167
|
name: 'database_metadata',
|
|
153
|
-
title: 'Describe a
|
|
154
|
-
description: '
|
|
168
|
+
title: 'Describe a database',
|
|
169
|
+
description: 'What is inside one database before you fetch it: the columns in each '
|
|
155
170
|
+ 'published format with their types, a few sample rows, the row count, the '
|
|
156
171
|
+ 'build date and the file sizes. Use this to answer questions about what a '
|
|
157
|
-
+ '
|
|
172
|
+
+ 'database contains without downloading it - the files reach several GB - and '
|
|
173
|
+
+ 'to budget a transfer before starting one.',
|
|
158
174
|
inputSchema: jsonSchema(z.object({
|
|
159
|
-
dataset_id: z.string().describe(
|
|
160
|
-
+ '`cdn_ip_v1`, not `cdn_ip`. The unversioned base id is a licence '
|
|
161
|
-
+ 'reference and is not accepted here.'),
|
|
175
|
+
dataset_id: z.string().describe(VERSIONED_ID),
|
|
162
176
|
})),
|
|
163
177
|
outputSchema: DATASET_METADATA_SCHEMA,
|
|
164
|
-
annotations: {
|
|
178
|
+
annotations: {
|
|
179
|
+
readOnlyHint: true,
|
|
180
|
+
idempotentHint: true,
|
|
181
|
+
openWorldHint: true,
|
|
182
|
+
},
|
|
165
183
|
},
|
|
166
184
|
handler: async (args) => {
|
|
167
185
|
const { dataset_id } = z.object({ dataset_id: z.string() }).parse(args);
|
|
@@ -171,12 +189,12 @@ function databaseTools(ctx) {
|
|
|
171
189
|
{
|
|
172
190
|
tool: {
|
|
173
191
|
name: 'database_checksum',
|
|
174
|
-
title: 'Get a
|
|
175
|
-
description: 'The published digests for one
|
|
176
|
-
+ 'already hold or deciding whether a build has changed since you last
|
|
192
|
+
title: 'Get a database\'s checksums',
|
|
193
|
+
description: 'The published digests for one database file, for verifying a copy '
|
|
194
|
+
+ 'you already hold or deciding whether a build has changed since you last '
|
|
195
|
+
+ 'fetched it.',
|
|
177
196
|
inputSchema: jsonSchema(z.object({
|
|
178
|
-
dataset_id: z.string().describe(
|
|
179
|
-
+ '`cdn_ip_v1`, not `cdn_ip`.'),
|
|
197
|
+
dataset_id: z.string().describe(VERSIONED_ID),
|
|
180
198
|
format: formats.describe('Which published file to digest.'),
|
|
181
199
|
})),
|
|
182
200
|
outputSchema: {
|
|
@@ -184,7 +202,11 @@ function databaseTools(ctx) {
|
|
|
184
202
|
properties: { checksums: { type: 'object', additionalProperties: true } },
|
|
185
203
|
required: ['checksums'],
|
|
186
204
|
},
|
|
187
|
-
annotations: {
|
|
205
|
+
annotations: {
|
|
206
|
+
readOnlyHint: true,
|
|
207
|
+
idempotentHint: true,
|
|
208
|
+
openWorldHint: true,
|
|
209
|
+
},
|
|
188
210
|
},
|
|
189
211
|
handler: async (args) => {
|
|
190
212
|
const parsed = z.object({
|
|
@@ -195,6 +217,38 @@ function databaseTools(ctx) {
|
|
|
195
217
|
return ok({ checksums: checksums });
|
|
196
218
|
},
|
|
197
219
|
},
|
|
220
|
+
{
|
|
221
|
+
tool: {
|
|
222
|
+
name: 'list_downloads',
|
|
223
|
+
title: 'List recent download attempts',
|
|
224
|
+
description: 'This organization\'s own recent download attempts, newest first, '
|
|
225
|
+
+ 'REFUSALS INCLUDED - a denial carries the `outcome` and `http_status` that '
|
|
226
|
+
+ 'answer "it stopped working", which nothing else here can. Use it to explain '
|
|
227
|
+
+ 'a failing fetch, to confirm a transfer ran, or to check whether a request '
|
|
228
|
+
+ 'was theirs. This is a bounded WINDOW of at most '
|
|
229
|
+
+ `${DOWNLOADS_LIMIT} rows, so a database missing from the answer means it is `
|
|
230
|
+
+ 'not in this window - never that it was never downloaded.',
|
|
231
|
+
inputSchema: jsonSchema(z.object({
|
|
232
|
+
limit: z.number().int().min(1).max(DOWNLOADS_LIMIT).optional().describe(`How many attempts to return, newest first. At most ${DOWNLOADS_LIMIT}; `
|
|
233
|
+
+ 'the API defaults to 50.'),
|
|
234
|
+
})),
|
|
235
|
+
outputSchema: objectSchema({
|
|
236
|
+
downloads: { type: 'array', items: { type: 'object', additionalProperties: true } },
|
|
237
|
+
}, ['downloads']),
|
|
238
|
+
annotations: {
|
|
239
|
+
readOnlyHint: true,
|
|
240
|
+
idempotentHint: false,
|
|
241
|
+
openWorldHint: true,
|
|
242
|
+
},
|
|
243
|
+
},
|
|
244
|
+
handler: async (args) => {
|
|
245
|
+
const { limit } = z.object({
|
|
246
|
+
limit: z.number().int().min(1).max(DOWNLOADS_LIMIT).optional(),
|
|
247
|
+
}).parse(args);
|
|
248
|
+
const downloads = await ctx.client.database.downloads(limit === undefined ? {} : { limit: limit });
|
|
249
|
+
return ok({ downloads: downloads });
|
|
250
|
+
},
|
|
251
|
+
},
|
|
198
252
|
];
|
|
199
253
|
}
|
|
200
254
|
/**
|
package/dist/tools.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB,OAAO,EACH,qBAAqB,EAAE,sBAAsB,GAChD,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACrF,OAAO,EACH,uBAAuB,EAAE,uBAAuB,EAAE,oBAAoB,GACzE,MAAM,iBAAiB,CAAC;AAEzB,0DAA0D;AAC1D,MAAM,CAAC,MAAM,WAAW,GAAG,GAAG,CAAC;
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vpndetection-mcp",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0",
|
|
4
4
|
"description": "Official MCP server for the VPNDetection API. Gives an LLM agent VPN, proxy, Tor, hosting and CDN detection for any IP address.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -50,7 +50,7 @@
|
|
|
50
50
|
},
|
|
51
51
|
"dependencies": {
|
|
52
52
|
"@modelcontextprotocol/sdk": "^1.20.2",
|
|
53
|
-
"vpndetection": "^1.
|
|
53
|
+
"vpndetection": "^1.9.0",
|
|
54
54
|
"zod": "^4.1.12"
|
|
55
55
|
},
|
|
56
56
|
"devDependencies": {
|