InternetData MCP Server
Use read-only tools to inspect InternetData's licensed IP/ASN database catalog, metadata, checksums, and your organization's download history.
List every published database family with your organization's license standing (
licensed,expired, orunlicensed), license type/term, and available versions/formats.Describe a versioned database: columns and types, sample rows, row count, build date, file sizes, and evaluation sample details.
Get published checksums (
md5,sha1,sha256,sha512) for a database file format to verify a copy or detect changes.List your organization's recent download attempts, up to 200 newest first, including refusals, outcomes, and HTTP statuses.
All tools are read-only; the server deliberately has no download tool. Use client libraries or the API to transfer database files.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@InternetData MCP Serverwhich IP databases are we licensed for, and how big is the latest VPN build?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
InternetData MCP Server
The official Model Context Protocol server for the InternetData API.
InternetData publishes IP and ASN databases: geolocation, anonymity, ownership and network data, as gzipped CSV and as MMDB. This server gives an AI agent four read-only tools over them - every database we publish and where your organization's license for each one stands, what is inside one, the digests to verify a copy you already hold, and your recent download history.
Getting Started
We host it at https://mcp.internetdata.io/mcp, and you sign in to it with your InternetData account. It also runs on your own machine from npm. Either way it sees where your organization's license for each database stands. Databases are licensed by contract. The Open ones, tor_ip_v1 among them, are licensed to every organization from the start and are free under CC BY-SA 4.0. For the rest, see the API documentation, or request an evaluation if your organization doesn't have a license yet.
In Claude
In claude.ai, the desktop app or Cowork, add https://mcp.internetdata.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:
/plugin marketplace add internetdata/claude-plugin
/plugin install internetdata@internetdataEither way you sign in with your InternetData account, and Claude never sees your API key. The steps, the skills and how to disconnect: docs.internetdata.io/integrations/claude.
In ChatGPT and Codex
In ChatGPT on the web, add https://mcp.internetdata.io/mcp as a custom MCP server under Plugins and choose OAuth. In Codex, install our plugin, which adds the server with skills:
codex plugin marketplace add internetdata/openai-plugin
codex plugin add internetdata@internetdata
codex mcp login internetdataEither way you sign in with your InternetData account, and neither sees your API key. The steps: docs.internetdata.io/integrations/chatgpt and docs.internetdata.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.internetdata.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
You need an API key carrying the db.download scope. Add this to your MCP client's config:
{
"mcpServers": {
"internetdata": {
"command": "npx",
"args": ["-y", "internetdata-mcp"],
"env": { "INTERNETDATA_API_KEY": "your-key" }
}
}
}Requires Node.js 22 or newer. INTERNETDATA_BASE_URL overrides the endpoint if you need to point somewhere else.
Related MCP server: DB MCP Demo
Tools
Tool | What it answers |
| Every database we publish, with its |
| A database's columns, sample rows, row count, build date and file sizes. |
| The published digests for one database file. |
| Your organization's recent download attempts, refusals included. |
Every tool is read-only.
Two spellings of a database id
list_databases answers a base id and a versions array:
{
"base": "vpn_ip",
"standing": "licensed",
"open": false,
"versions": [{ "id": "vpn_ip_v1", "version": 1, "formats": ["csvgz", "mmdb"] }]
}The base is what a license names. versions[].id is what a download names, and it is the one database_metadata and database_checksum accept. The tools say so in their own descriptions, so an agent generally gets this right on its own; it is worth knowing when you read a transcript where one was refused.
There is no download tool, deliberately
The published builds run to several GB, which is not something an agent should pull into a conversation. database_metadata is how you find out what a transfer would cost, and the client libraries or the API are how you actually move the bytes.
Reading the download history
list_downloads is a bounded window - at most 200 attempts, newest first - and it lists refusals alongside successes, because a denial and its http_status are what answer "it stopped working". A database missing from the answer means it is not in that window, never that it was never fetched.
Other Libraries
There are official InternetData client libraries available for many languages including PHP, Python, Go, Java, and Ruby. See our GitHub at https://github.com/internetdata for more.
About InternetData
Geolocation, anonymity, ownership and network databases for IP addresses and AS numbers, licensed as files you download and query yourself.
License
This project is licensed under the MIT License.
Available Tools
4 toolsdatabase_checksumGet a database's checksumsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| format | Yes | Which published file to digest. | |
| dataset_id | Yes | A VERSIONED database id, from `versions[].id` in `list_databases` - `bogon_ip_v1`, not `bogon_ip`. The unversioned base id is a license reference and is not accepted here. |
Output Schema
| Name | Required | Description |
|---|---|---|
| checksums | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, and the description adds real behavioral context: the licensing constraint ('a database this key cannot download is refused here too') and the fact that lookups are not recorded as downloads. These are non-obvious traits that go beyond the safety hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences that front-load the core purpose and reply to each subsequent question (license parity, download-listing side effect). No filler, though the third sentence slightly restates the sibling-separation point.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema covering return values and rich annotations covering the safety profile, the description supplies everything else an agent needs: what it returns, the licensing gate, and the non-download side effect. Nothing material is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 both parameters, including the versioned vs. unversioned dataset_id distinction. The description reinforces the licensing implication of dataset_id but adds little syntax beyond the schema. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('published digests for one database file') and explicitly distinguishes itself from the sibling 'list_downloads' by noting lookups don't appear there. An agent can identify this as the checksum/hash retrieval tool without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear triggers for use ('verifying a copy you already hold or deciding whether a build has changed since you last fetched it') and one explicit exclusion (not a download, not in list_downloads). It doesn't position itself against database_metadata or list_databases, but the usage context is concrete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
database_metadataDescribe a databaseARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| dataset_id | Yes | A VERSIONED database id, from `versions[].id` in `list_databases` - `bogon_ip_v1`, not `bogon_ip`. The unversioned base id is a license reference and is not accepted here. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| size | Yes | Bytes per format. |
| sample | No | A few real rows, keyed by format. |
| schema | Yes | Columns, keyed by format. |
| entries | Yes | Row count in the current build. |
| updated | Yes | ISO-8601 date (YYYY-MM-DD) the published build was generated on. |
| sample_size | No | Bytes per format of the evaluation sample, where one is published. |
| update_freq | No | How often a new build is published. |
| sample_entries | No | Row count in the evaluation sample. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnly, idempotent, non-destructive, openWorld, so the safety profile is covered. The description adds useful non-obvious context the annotations cannot: that this is a cheap preview whose purpose is to avoid multi-GB downloads and to size a transfer.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the payload contents and immediately followed by the reason to use it. No filler or restatement of the name/title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be spelled out, and the description still covers content shape, cost/size caveat, and intent. For a single-parameter read-only tool this is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the dataset_id description is unusually rich (versioned vs unversioned id, source of the value, an example). The description itself adds no parameter guidance, so the schema carries this dimension; baseline 3 is correct.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (describe/what is inside) and enumerates exactly what is returned: columns and types per format, sample rows, row count, build date, file sizes. The 'without downloading it' framing contrasts it cleanly with the download/checksum siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives two clear use cases - answering content questions without downloading, and budgeting a transfer before starting one - plus the implicit exclusion that downloading multi-GB files is the alternative. It stops short of naming a sibling tool explicitly, so it is strong context rather than full when/when-not routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_databasesList databasesARead-onlyIdempotentInspect
The IP 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 a license names, and a versions array whose id is what the other tools take - pass versions[].id (bogon_ip_v1), never the base (bogon_ip). Ask again rather than holding on to this: it is answered per key and is not the same for everyone.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| databases | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld, and non-destructive, so the safety profile is covered. The description adds genuinely non-annotated behavior: results are scoped to the calling key's organization and are volatile, so the agent should re-query rather than hold the result.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose, then the standing enum, then the critical id rule, then the caching caveat. Dense and mostly earned, though the middle sentence is long and packs several distinct concepts together.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With zero parameters, full annotation coverage, and an output schema, the description only needs to supply meaning the structured fields cannot. It does exactly that by defining the standing enum values and warning which id field downstream tools accept.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no input parameters, so the baseline is 4. The description spends its space on output semantics instead (standing values, base vs versions ids), which is beyond the schema's scope and useful, though it is not parameter semantics per se.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (list) and resource (the IP database catalog), and pins down the unit of return: one entry per database FAMILY. It also disambiguates itself from siblings implicitly by describing the catalog view, not metadata, checksums, or downloads.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives real operational guidance — answer per key, do not cache, ask again — but never states when to call this versus database_metadata or list_downloads, nor that it is the prerequisite step for discovering the ids other tools need. Usage is implied rather than directed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_downloadsList recent download attemptsARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many attempts to return, newest first. At most 200; the API defaults to 50. |
Output Schema
| Name | Required | Description |
|---|---|---|
| downloads | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover read-only/idempotency safety, but the description adds behavior they cannot express: refusals are included rather than filtered, denial rows carry outcome and http_status, and results are a bounded 200-row window. The explicit warning against interpreting absence as 'never downloaded' is exactly the kind of negative-inference caveat that prevents agent error, though ordering/pagination beyond 'newest first' is left implicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with what the tool returns and its key differentiator before the caveat. It is dense and does earn most of its sentences, though the capitalized emphasis and the quoted 'it stopped working' phrasing add rhetorical weight rather than information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-optional-parameter read tool with an output schema, this covers everything an agent needs: what rows appear, that denials are present, the maximum window size, and the misreading to avoid. Return-value shape is correctly left to the output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the limit parameter already documents the 200 cap and the API's 50-row default. The description reinforces the window bound as a semantic constraint but adds no new syntax or meaning for the parameter itself, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (list this organization's download attempts), plus scope (own, newest first) and a distinguishing property (refusals included). An agent can tell instantly that this is the only tool returning per-attempt outcome/http_status data versus the metadata/checksum siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives three explicit trigger scenarios — explain a failing fetch, confirm a transfer ran, check whether a request was theirs — and notes that no other tool here can supply the denial details. That is concrete when-to-use guidance tied to a differentiator.
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.
4 tool updates
v3.1.3- Changed
database_checksum1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
database_metadata1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
list_databases3 fields changed- added
Input schema / propertiesAdded value: +{} - added
Output schema / properties / databases / items / properties / openAdded value: +{ + "description": "An Open database: free under CC BY-SA 4.0 (credit InternetData,\nhttps://internetdata.io, and share what you build from it under\nthe same license). Every organization holds a `standard` license\nto it from the start, which `standing` and `license_type` report\nlike any other.\n", + "type": "boolean" +} - changed
Output schema / properties / databases / items / requiredPrevious value: -[ - "base", - "name", - "summary", - "standing", - "license_type", - "starts", - "expires", - "renews_at", - "notice_due_at", - "versions" -]New value: +[ + "base", + "name", + "summary", + "standing", + "open", + "license_type", + "starts", + "expires", + "renews_at", + "notice_due_at", + "versions" +]
- Changed
list_downloads3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Output schema / properties / downloads / items / properties / openAdded value: +{ + "description": "A download of an Open database.\n", + "type": "boolean" +} - changed
Output schema / properties / downloads / items / requiredPrevious value: -[ - "dataset_id", - "format", - "outcome", - "sample", - "bytes", - "http_status", - "apikey_id", - "client_ip", - "user_agent", - "created" -]New value: +[ + "dataset_id", + "format", + "outcome", + "sample", + "open", + "bytes", + "http_status", + "apikey_id", + "client_ip", + "user_agent", + "created" +]
4 tool updates
v2.2.0- Changed
database_checksum1 field changed- changed
Input schema / properties / dataset_id / descriptionPrevious value: -"A VERSIONED database id, from `versions[].id` in `list_databases` - `bogon_ip_v1`, not `bogon_ip`. The unversioned base id is a licence reference and is not accepted here."New value: +"A VERSIONED database id, from `versions[].id` in `list_databases` - `bogon_ip_v1`, not `bogon_ip`. The unversioned base id is a license reference and is not accepted here."
- Changed
database_metadata3 fields changed- changed
Input schema / properties / dataset_id / descriptionPrevious value: -"A VERSIONED database id, from `versions[].id` in `list_databases` - `bogon_ip_v1`, not `bogon_ip`. The unversioned base id is a licence reference and is not accepted here."New value: +"A VERSIONED database id, from `versions[].id` in `list_databases` - `bogon_ip_v1`, not `bogon_ip`. The unversioned base id is a license reference and is not accepted here." - added
Output schema / properties / sample_entriesAdded value: +{ + "description": "Row count in the evaluation sample.", + "type": "integer" +} - added
Output schema / properties / sample_sizeAdded value: +{ + "additionalProperties": { + "format": "int64", + "type": "integer" + }, + "description": "Bytes per format of the evaluation sample, where one is published.", + "type": "object" +}
- Changed
list_databases18 fields changed- changed
Output schema / properties / databases / items / descriptionPrevious value: -"One database FAMILY, with your organization's licence beside it. A\nlicence covers the family, while a download names a specific version,\nso the ids passed to `download` and `checksum` come from `versions`.\n"New value: +"One database FAMILY, with your organization's license beside it. A\nlicense covers the family, while a download names a specific version,\nso the ids passed to `download` and `checksum` come from `versions`.\n" - changed
Output schema / properties / databases / items / properties / base / descriptionPrevious value: -"The family, e.g. `vpn_ip`. What a licence is held against."New value: +"The family, e.g. `vpn_ip`. What a license is held against." - changed
Output schema / properties / databases / items / properties / expires / descriptionPrevious value: -"A hard stop. Null when the licence has no end date, which is the normal case for a rolling agreement, and when there is no licence. A rolling licence reports its turnover date in renews_at instead."New value: +"A hard stop. Null when the license has no end date, which is the normal case for a rolling agreement, and when there is no license. A rolling license reports its turnover date in renews_at instead." - removed
Output schema / properties / databases / items / properties / expires / nullableRemoved value: -true - changed
Output schema / properties / databases / items / properties / expires / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / databases / items / properties / license_type / descriptionPrevious value: -"What your licence permits you to do with the data. Null when there\nis no licence.\n"New value: +"What your license permits you to do with the data. Null when there\nis no license, which is every family with standing `unlicensed`.\n" - removed
Output schema / properties / databases / items / properties / license_type / nullableRemoved value: -true - changed
Output schema / properties / databases / items / properties / license_type / typePrevious value: -"string"New value: +[ + "string", + "null" +] - removed
Output schema / properties / databases / items / properties / notice_due_at / nullableRemoved value: -true - changed
Output schema / properties / databases / items / properties / notice_due_at / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / databases / items / properties / renews_at / descriptionPrevious value: -"When a rolling licence next renews. Null when the licence has no defined term, when expires sets a hard stop instead, and when there is no licence."New value: +"When a rolling license next renews. Null when the license has no defined term, when expires sets a hard stop instead, and when there is no license." - removed
Output schema / properties / databases / items / properties / renews_at / nullableRemoved value: -true - changed
Output schema / properties / databases / items / properties / renews_at / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / databases / items / properties / standing / descriptionPrevious value: -"`licensed` is a live grant, `expired` one whose term has ended, and\n`unlicensed` a database published but never bought.\n"New value: +"Where your license for a database family stands today. `licensed` is a\nlive grant, `expired` one whose term has ended, and `unlicensed` a\ndatabase published but never bought.\n" - removed
Output schema / properties / databases / items / properties / starts / nullableRemoved value: -true - changed
Output schema / properties / databases / items / properties / starts / typePrevious value: -"string"New value: +[ + "string", + "null" +] - added
Output schema / properties / databases / items / properties / versions / items / properties / formats / items / descriptionAdded value: +"A file format a database version is published in." - added
Output schema / properties / databases / items / properties / versions / items / properties / sample_formatsAdded value: +{ + "description": "The formats an evaluation sample is published in, if any.", + "items": { + "description": "A file format a database version is published in.", + "enum": [ + "csvgz", + "mmdb" + ], + "type": "string" + }, + "type": "array" +}
- Changed
list_downloads12 fields changed- removed
Output schema / properties / downloads / items / properties / apikey_id / nullableRemoved value: -true - changed
Output schema / properties / downloads / items / properties / apikey_id / typePrevious value: -"string"New value: +[ + "string", + "null" +] - removed
Output schema / properties / downloads / items / properties / bytes / nullableRemoved value: -true - changed
Output schema / properties / downloads / items / properties / bytes / typePrevious value: -"integer"New value: +[ + "integer", + "null" +] - removed
Output schema / properties / downloads / items / properties / client_ip / nullableRemoved value: -true - changed
Output schema / properties / downloads / items / properties / client_ip / typePrevious value: -"string"New value: +[ + "string", + "null" +] - removed
Output schema / properties / downloads / items / properties / http_status / nullableRemoved value: -true - changed
Output schema / properties / downloads / items / properties / http_status / typePrevious value: -"integer"New value: +[ + "integer", + "null" +] - added
Output schema / properties / downloads / items / properties / sampleAdded value: +{ + "description": "The evaluation sample rather than the database itself.", + "type": "boolean" +} - removed
Output schema / properties / downloads / items / properties / user_agent / nullableRemoved value: -true - changed
Output schema / properties / downloads / items / properties / user_agent / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / downloads / items / requiredPrevious value: -[ - "dataset_id", - "format", - "outcome", - "bytes", - "http_status", - "apikey_id", - "client_ip", - "user_agent", - "created" -]New value: +[ + "dataset_id", + "format", + "outcome", + "sample", + "bytes", + "http_status", + "apikey_id", + "client_ip", + "user_agent", + "created" +]
4 tool updates
v1.0.0- First observed
database_checksum - First observed
database_metadata - First observed
list_databases - First observed
list_downloads
TDQS
Scored across 4 tools
Each tool targets a distinct action: listing the catalog, inspecting one database's contents, fetching one file's digests, and reviewing download history. The main risk is mild overlap between list_databases/database_metadata and database_metadata/database_checksum, since both pairs concern 'a database,' but the descriptions make the schema-vs-digest distinction clear.
All names use snake_case, which is readable, but the convention is mixed: two tools use a list_ verb prefix while the other two use a bare database_ noun prefix. The pattern shifts depending on whether the tool is a list operation or a per-database lookup.
Four tools is on the lean side but each covers a genuinely distinct facet of a data-catalog domain (catalog, metadata, checksums, download history). Nothing feels padded or redundant.
The surface covers catalog browsing, pre-fetch inspection, integrity verification, and transfer history, which is a coherent lifecycle for a licensed-dataset store. The only notable gap is the absence of an explicit download/initiation tool, though the text implies fetching happens out-of-band, plus no search/filter operation.
Maintenance
Related MCP Connectors
Free, no-API-key network lookups for AI agents — IP geolocation, DNS, WHOIS, HTTP and SSL/TLS certificate checks, and full domain health reports.
Read-only search of 2,189 AI agent tools (MCP servers, x402 APIs) with daily automated trust scores.
Free open dataset of compliance, security and risk AI agents and audit firms. Read-only search.
A read-only verified record of agent-operable GTM tools: search, fetch, compare, track changes.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceExposes a SQLite database to AI assistants with structured, read-safe access. Includes five tools for schema exploration, querying, and sampling data.-
- FlicenseNot gradedqualityBmaintenanceProvides read-only database access for AI agents, enabling table listing, schema inspection, and filtered row queries through MCP tools.-
- AlicenseAqualityCmaintenanceEnables AI agents to inspect real databases through MCP with tools for listing tables, describing schemas, sampling rows, running queries, and explaining execution plans, all with engine-enforced read-only access to SQLite and MySQL.51 npmMIT
- AlicenseAqualityAmaintenanceEnables AI agents to classify IP addresses through the VPNDetection API with read-only tools that detect VPNs, residential and datacenter proxies, Tor nodes, relays, hosting providers and CDNs, in single or bulk lookups of up to 100 addresses. It also exposes which datasets an organisation is licensed for, along with their metadata and published checksums.7197 npm1MIT