The endpoint agents call.
Verified, ranked, and structured — with an honest map of what's live on Acki Nacki today. Read-only, machine-first, no scraping required.
/api/v1/* over rankings, dapps, pulse, chain & health.
A plain-text index of the site & API for LLMs, at /llms.txt.
WebSite + Dataset markup on every page.
Live read-only agent tools for pulse, rankings, dapps, health & radar.
{
"mcpServers": {
"ackipro-radar": {
"command": "node",
"args": ["services/mcp/dist/index.js"],
"env": { "API_BASE": "https://<your-radar-host>" }
}
}
}- GET/api/v1/rankings
- GET/api/v1/pulse
- GET/api/v1/dapps
- GET/api/v1/dapps/:slug
- GET/api/v1/health/:slug
- GET/api/v1/health/:slug/history
- GET/api/v1/radar
- GET/api/v1/radar/clusters/:codeHash
Overview
ACKI.PRO is the radar for the Acki Nacki economy. It tracks dapps, the live chain pulse, and auto-detected on-chain activity — surfacing what's actually happening on the network, not a curated marketing list.
The project tracks the live Acki Nacki mainnet today. Every number on the site is real chain data, honestly labelled: when data isn't available yet, the UI shows that plainly instead of inventing a figure.
Pulse
The pulse strip reports four live metrics:
activeWallets24h— distinct wallets seen active in the last 24 hours.tps— transactions per second, sampled from recent chain activity.txRecent— a recent transaction count over awindowSecondswindow. This is a recent sample, not a full 24h count.trackedDapps— how many dapps the radar currently tracks.
On cold start, before enough history exists to compute a trend, deltas render as — rather than a fabricated 0% or placeholder change.
Health score
Each tracked dapp gets a Health score built from five weighted components:
- liveness — 0.25
- activity — 0.25
- reach — 0.20
- verification — 0.15
- footprint — 0.15
The score is computed under one of three coverage modes:
- metadata-only — no chain data yet; the score is computed only over verification and footprint.
- partial— activity and liveness are measured but reach is deferred; the score is renormalized to exclude reach's weight, so reach's absence never penalizes the dapp.
- full — all five components are measured.
The score is explainable — every component and coverage mode is shown — and never fabricated: missing data lowers coverage, it doesn't get guessed.
Radar (auto-detection)
Acki Nacki has no account-enumeration API, so the radar rides the transaction stream instead and looks for two signals:
- code_hash clusters — unrecognized accounts that share contract code.
- first-seen accounts — accounts appearing on-chain for the first time.
Each detection gets a confidence tier:
- a cluster of 5 or more accounts → high confidence
- a cluster of 2–4 accounts → medium confidence
- a first-seen account → low confidence
From there a detection can be promoted — becoming a tracked dapp in the rankings with its own /dapp/:slug profile — or dismissed, which removes it from the feed and keeps it gone across rescans. Admin review of detections is token-gated, not open to the public.
API
All public endpoints are GET requests and return the same envelope: { ok: boolean, data?, error? }.
GET /api/v1/pulse — the live pulse snapshot
{
"ok": true,
"data": {
"activeWallets24h": 42,
"tps": 3,
"txRecent": 118,
"windowSeconds": 60,
"trackedDapps": 12,
"deltas": { "activeWallets24h": 2, "tps": null }
}
}GET /api/v1/rankings?limit=N — dapps ranked by Health score, optionally limited to the top N
{
"ok": true,
"data": [
{ "rank": 1, "dapp": { "slug": "ackiscan", "name": "AckiScan" }, "health": { "score": 88 } }
]
}GET /api/v1/dapps?category=X — the tracked dapp list, optionally filtered by category
{
"ok": true,
"data": [
{ "slug": "ackiscan", "name": "AckiScan", "categoryLabel": "Explorer", "verified": true }
]
}GET /api/v1/dapps/:slug — full profile for a single tracked dapp
{
"ok": true,
"data": { "slug": "ackiscan", "name": "AckiScan", "category": "explorer", "verified": true, "contracts": [] }
}GET /api/v1/health/:slug — the latest Health score point for a dapp
{
"ok": true,
"data": { "ts": "2026-07-04T12:00:00Z", "score": 88, "components": { "liveness": 0.9, "activity": 0.8, "reach": 0.7, "verification": 1, "footprint": 0.6 } }
}GET /api/v1/health/:slug/history — the Health score time series for a dapp
{
"ok": true,
"data": [ { "ts": "2026-07-04T12:00:00Z", "score": 88, "components": { "liveness": 0.9, "activity": 0.8, "reach": 0.7, "verification": 1, "footprint": 0.6 } } ]
}GET /api/v1/radar — the open radar feed of detections awaiting review
{
"ok": true,
"data": [
{ "id": "d1", "kind": "cluster", "ref": "0xabc123", "signal": "code_hash cluster", "confidence": "high", "accountCount": 7, "status": "open" }
]
}GET /api/v1/radar/clusters/:codeHash — detail for a single detected code_hash cluster, including sample accounts
{
"ok": true,
"data": { "cluster": { "codeHash": "0xabc123", "accountCount": 7, "txCount": 210, "status": "open" }, "sampleAccounts": [] }
}/api/v1/admin/* also exists (detection review, promote/dismiss, corrections triage) but is token-gated and not intended for public use.
MCP agent gateway
ACKI.PRO exposes an MCP (Model Context Protocol) gateway so an AI agent can query the radar directly instead of scraping the site. The gateway has 7 read-only tools:
get_pulse— the live network pulse snapshot.get_rankings— dapps ranked by Health score.list_dapps— the tracked dapp list.get_dapp— details for a single dapp by slug.get_dapp_health— Health score and history for a dapp.list_radar_detections— open radar detections.get_cluster— detail for a detected code_hash cluster.
The gateway speaks stdio and is self-hosted: build services/mcp and run it with an API_BASE pointed at your radar API:
$ npm run -w services/mcp build
$ API_BASE=https://<your-radar-host> node services/mcp/dist/index.jsAdd it to an agent (Claude Desktop, Claude Code, or Cursor) with:
{
"mcpServers": {
"ackipro-radar": {
"command": "node",
"args": ["services/mcp/dist/index.js"],
"env": { "API_BASE": "https://<your-radar-host>" }
}
}
}Every tool is read-only and isolated: the gateway only talks to /api/v1, never to the chain or the database directly, and it never performs mutations. A hosted HTTP transport (so agents don't need to self-host) is planned but not live yet.
Methodology
Real, live today:
- Pulse, rankings, dapp profiles, Health scoring, and radar detection.
- The MCP gateway, over stdio, self-hosted.
Deferred, not yet measured:
- Reach / distinct-caller measurement (excluded from partial-coverage Health scores).
- On-chain contract mapping for the original seed dapps.
- A hosted HTTP transport for the MCP gateway.
Sampling caveat: activity is measured from the last N transactions in the stream, not a full historical scan — for a very active contract this is an honest lower bound, not a complete count.
Zero-fabrication stance: if a number isn't measured, it renders as —or the coverage mode says so — it is never invented. Spot something wrong? Submit a correction from the correction form on any project's profile page.