The full upstream README, mirrored here for reference. Install config, tool schemas, adoption signals, and an original overview live on the European IP Data & Analytics — IPRATE listing page.
Open-source adapter for IPRATE's four-tool, anonymous, read-only MCP endpoint:
The adapter exposes bounded selections from one completed IPRATE static release:
find_ip_representativesget_ip_representative_profileget_ip_market_snapshotget_iprate_coverageIt has no database, ORM, SQL, database credential, application-API fallback, or private
IPRATE package dependency. Ratings and statistics are copied from released JSON assets;
they are never recomputed by the MCP service. Anonymous calls are rate limited in memory
(HTTP 429 with Retry-After; results are never silently truncated), and GET /healthz
reports whether one internally consistent release is servable.
Set IPRATE_MCP_ASSET_ROOT to a completed /data/v1-shaped release directory containing
manifest.json, the released cohort and global assets, and mcp/v0.1/catalog.json. Set
IPRATE_MCP_ASSET_BASE_URL to the public URL used in source citations.
The catalogue is derived only from static profile assets:
The builder fails if required indexes are missing, checksums differ, profile counts do not match the release manifest, or a profile asset is unreadable. It never imports or connects to IPRATE's database, API, models, or pipeline.
In production the adapter never reads the live, mutating export tree. A refresher
(iprate-free-mcp-refresh-release) watches the live manifest.json and, when a new
release_id appears, copies every manifest-declared asset into an immutable per-release
snapshot (checksum-verified against the manifest), builds the catalogue inside that
snapshot, and atomically repoints a current symlink. The server keeps serving the
previous complete release until the next one is activated; a release that changes while
it is being snapshotted is abandoned and retried on the next pass. Snapshots contain no
entity profile files — profile data enters only through the derived catalogue — and the
catalogue is never written into the publicly served tree.
Run the adapter against a compatible static release:
The local endpoint is http://127.0.0.1:8000/mcp; liveness is GET /healthz.
compose.yaml runs two hardened services built from the same image:
mcp — the server, unprivileged and read-only, mounting only the snapshot directory
(read-only) and serving IPRATE_MCP_ASSET_ROOT=/data/current. It joins the existing
runtime_default network for Cloudflare Tunnel routing and publishes no host port.refresher — the snapshot builder, with network_mode: none, mounting the live
export tree read-only and the snapshot directory read-write.Environment overrides: IPRATE_STATIC_ROOT (live export tree),
IPRATE_MCP_RELEASES_ROOT (snapshot directory), IPRATE_MCP_REFRESH_UID/GID
(owner of the snapshot directory), IPRATE_MCP_RATE_LIMIT_PER_MINUTE (default 120),
IPRATE_MCP_STALE_AFTER_DAYS (default 21). Neither service receives a database or
application secret.
Documentation: https://iprate.eu/developers/mcp/
Adapter code is Apache-2.0. IPRATE data and website content have separate terms and licences; this code licence does not grant rights to them or to IPRATE trademarks.