Skip to main content
Glama

audit_cluster

audit_cluster
Read-onlyIdempotent

Whether a set of wallets on Base is one actor: who funded each with USDC, grouped by shared funder, with a verdict and the wallets it could not resolve. Turns "55 distinct payers" into "one actor with 55 wallets", or fails to. Call it on a line: a call without one has only a moment, enough for a small range of recent blocks, and is cut, uncharged, when it needs longer. from_block is a block number and defaults to the whole history; Base adds about 43,200 blocks a day. The first answer says how many windows the scan will take and about how many milliseconds, at the pace of recent scans, and each one after says how many are done. $0.000001 per millisecond on a line. Paid, on a line. With no wallet code, a pass (https://mcp.zeamprism.com/pass) or the Bridge buys the time and opens the line for you: https://mcp.zeamprism.com/how-to-pay Example: {"addresses":["0x000000000000000000000000000000000000dEaD","0x0000000000000000000000000000000000000001"],"from_block":51000000}

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
lineNooptional — a line credential: the call burns the line's time and carries no payment.
tokenNooptional string — the asset to follow, 0x form; default USDC.
windowNooptional int — blocks per snapshot, default 10000; smaller gives a short line its first snapshot sooner.
to_blockNooptional int — stop; default the head.
addressesYesarray — 2 to 400 wallets, 0x form.
from_blockNooptional int — the block to start from; default the whole history. If the line runs out mid-scan you get what was scanned so far, marked partial; continue with to_block set to one below scanned.from.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
okNo
errorNo
rangeNo
tokenNo
caveatNo
partialNo
readingNo
scannedNo
windowsNo
about_msNo
clustersNo
evidenceNo
subjectsNo
dead_endsNo
same_actorNo
unresolvedNo
clusters_detailNo
largest_clusterNo
funders_by_addressNo
unresolved_by_addressNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedOutput schema / properties / about_ms
      Added value: +{
      +  "anyOf": [
      +    {
      +      "description": "about how many milliseconds the rest of the scan needs, at the pace of recent scans; absent when it is done or no scan of this kind has run",
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ]
      +}
  2. Changed19 schema fields changed
    • addedInput schema / properties / addresses / items / type
      Added value: +"string"
    • addedInput schema / properties / addresses / maxItems
      Added value: +400
    • addedInput schema / properties / addresses / minItems
      Added value: +2
    • changedInput schema / properties / from_block / description
      Previous value: -"optional int — the block to start from; default the whole history. If the line runs out mid-scan you get what was scanned so far, marked partial; continue with to_block."New value: +"optional int — the block to start from; default the whole history. If the line runs out mid-scan you get what was scanned so far, marked partial; continue with to_block set to one below scanned.from."
    • addedInput schema / properties / from_block / minimum
      Added value: +0
    • changedInput schema / properties / from_block / type
      Previous value: -"number"New value: +"integer"
    • addedInput schema / properties / to_block / minimum
      Added value: +0
    • changedInput schema / properties / to_block / type
      Previous value: -"number"New value: +"integer"
    • addedInput schema / properties / window / minimum
      Added value: +1
    • changedInput schema / properties / window / type
      Previous value: -"number"New value: +"integer"
    • addedOutput schema / properties / caveat
      Added value: +{
      +  "anyOf": [
      +    {
      +      "description": "what the verdict does not cover",
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ]
      +}
    • addedOutput schema / properties / clusters
      Added value: +{
      +  "anyOf": [
      +    {
      +      "description": "groups of wallets that share a funder",
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ]
      +}
    • addedOutput schema / properties / clusters_detail
      Added value: +{
      +  "anyOf": [
      +    {
      +      "description": "one entry per group: members, subjects, funders",
      +      "items": {},
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ]
      +}
    • addedOutput schema / properties / largest_cluster
      Added value: +{
      +  "anyOf": [
      +    {
      +      "description": "wallets in the largest group",
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ]
      +}
    • addedOutput schema / properties / reading
      Added value: +{
      +  "anyOf": [
      +    {
      +      "description": "the verdict in a sentence",
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ]
      +}
    • addedOutput schema / properties / same_actor
      Added value: +{
      +  "anyOf": [
      +    {
      +      "description": "true when two or more of the wallets share a funder; largest_cluster says how many do. null before anything is scanned",
      +      "type": [
      +        "boolean",
      +        "null"
      +      ]
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ]
      +}
    • addedOutput schema / properties / subjects
      Added value: +{
      +  "anyOf": [
      +    {
      +      "description": "wallets asked about",
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ]
      +}
    • addedOutput schema / properties / unresolved
      Added value: +{
      +  "anyOf": [
      +    {
      +      "description": "wallets with no funder that counts as control",
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ]
      +}
    • addedOutput schema / properties / windows
      Added value: +{
      +  "anyOf": [
      +    {
      +      "additionalProperties": {},
      +      "description": "how far the scan has got",
      +      "properties": {
      +        "about_ms": {
      +          "anyOf": [
      +            {
      +              "description": "on the first answer: about how long the whole scan takes at the pace of recent scans of this kind; absent until one has run",
      +              "type": "number"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ]
      +        },
      +        "blocks": {
      +          "type": [
      +            "number",
      +            "null"
      +          ]
      +        },
      +        "done": {
      +          "type": [
      +            "number",
      +            "null"
      +          ]
      +        },
      +        "of": {
      +          "type": [
      +            "number",
      +            "null"
      +          ]
      +        }
      +      },
      +      "type": "object"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ]
      +}
  3. Changed3 schema fields changed
    • changedInput schema / properties / addresses / description
      Previous value: -"array — two to a few hundred wallets, 0x form."New value: +"array — 2 to 400 wallets, 0x form."
    • changedInput schema / properties / from_block / description
      Previous value: -"optional int — start; default the token's deployment (the whole history). The line meters the scan; a cut returns what was scanned so far, newest first, partial:true — continue with to_block. 0.65 to 1.6 s per 10,000 blocks here, by the wallet's traffic."New value: +"optional int — the block to start from; default the whole history. If the line runs out mid-scan you get what was scanned so far, marked partial; continue with to_block."
    • changedInput schema / properties / token / description
      Previous value: -"optional string — the asset to follow, 0x form; default the chain's stablecoin."New value: +"optional string — the asset to follow, 0x form; default USDC."
  4. Changed1 schema field changed
    • changedInput schema / properties / line / description
      Previous value: -"optional — your /pay credential: served off your line, no payment; without it, x402 payment in params._meta."New value: +"optional — a line credential: the call burns the line's time and carries no payment."
  5. Changed1 schema field changed
    • changedInput schema / properties / from_block / description
      Previous value: -"optional int — start; default the token's deployment (the whole history). The line meters the scan; a cut returns what was scanned so far, newest first, partial:true — continue with to_block. ~0.65 s per 10,000 blocks here."New value: +"optional int — start; default the token's deployment (the whole history). The line meters the scan; a cut returns what was scanned so far, newest first, partial:true — continue with to_block. 0.65 to 1.6 s per 10,000 blocks here, by the wallet's traffic."
  6. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$schema": "https://json-schema.org/draft/2020-12/schema",
      +  "additionalProperties": {},
      +  "properties": {
      +    "dead_ends": {
      +      "anyOf": [
      +        {
      +          "additionalProperties": {},
      +          "description": "senders not counted as control, keyed by address: {kind: contract|distributor, recipients?}",
      +          "properties": {},
      +          "type": "object"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "error": {
      +      "anyOf": [
      +        {
      +          "description": "present when ok is false",
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "evidence": {
      +      "anyOf": [
      +        {
      +          "additionalProperties": {},
      +          "description": "how to reproduce this on any archive node",
      +          "properties": {
      +            "at_block": {
      +              "type": [
      +                "number",
      +                "null"
      +              ]
      +            },
      +            "decode": {
      +              "type": [
      +                "string",
      +                "null"
      +              ]
      +            },
      +            "method": {
      +              "type": [
      +                "string",
      +                "null"
      +              ]
      +            },
      +            "note": {
      +              "type": [
      +                "string",
      +                "null"
      +              ]
      +            },
      +            "params": {
      +              "anyOf": [
      +                {
      +                  "items": {},
      +                  "type": "array"
      +                },
      +                {
      +                  "type": "null"
      +                }
      +              ]
      +            }
      +          },
      +          "type": "object"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "funders_by_address": {
      +      "anyOf": [
      +        {
      +          "additionalProperties": {},
      +          "description": "funders keyed by subject address",
      +          "properties": {},
      +          "type": "object"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "ok": {
      +      "type": [
      +        "boolean",
      +        "null"
      +      ]
      +    },
      +    "partial": {
      +      "anyOf": [
      +        {
      +          "description": "true while the scan has not reached range.from; a cut line returns the last partial",
      +          "type": "boolean"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "range": {
      +      "anyOf": [
      +        {
      +          "additionalProperties": {},
      +          "properties": {
      +            "from": {
      +              "type": [
      +                "number",
      +                "string",
      +                "null"
      +              ]
      +            },
      +            "to": {
      +              "type": [
      +                "number",
      +                "string",
      +                "null"
      +              ]
      +            }
      +          },
      +          "type": "object"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "scanned": {
      +      "anyOf": [
      +        {
      +          "additionalProperties": {},
      +          "description": "the blocks actually covered so far, newest first",
      +          "properties": {
      +            "from": {
      +              "type": [
      +                "number",
      +                "null"
      +              ]
      +            },
      +            "to": {
      +              "type": [
      +                "number",
      +                "null"
      +              ]
      +            }
      +          },
      +          "type": "object"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "token": {
      +      "anyOf": [
      +        {
      +          "additionalProperties": {},
      +          "properties": {},
      +          "type": "object"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "unresolved_by_address": {
      +      "anyOf": [
      +        {
      +          "additionalProperties": {},
      +          "description": "why each unresolved subject is unresolved",
      +          "properties": {},
      +          "type": "object"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    }
      +  },
      +  "type": "object"
      +}
  7. Changed6 schema fields changed
    • changedInput schema / properties / addresses / description
      Previous value: -"array — the wallets to test for common control, 0x form. Two to a few hundred."New value: +"array — two to a few hundred wallets, 0x form."
    • changedInput schema / properties / from_block / description
      Previous value: -"optional int — where to start. Defaults to the token's deployment — the whole history; the line meters the scan. If the line runs out first you get what was scanned so far, newest blocks first, marked partial with the range covered; call again with to_block below that to continue. Measured 2026-09-17: ~0.65 s per 10,000-block window on this node; the whole history is ~4,900 windows."New value: +"optional int — start; default the token's deployment (the whole history). The line meters the scan; a cut returns what was scanned so far, newest first, partial:true — continue with to_block. ~0.65 s per 10,000 blocks here."
    • changedInput schema / properties / line / description
      Previous value: -"optional — credential from the /pay socket. With it the call is served off your line and carries no payment. Without it, put x402 payment in params._meta."New value: +"optional — your /pay credential: served off your line, no payment; without it, x402 payment in params._meta."
    • changedInput schema / properties / to_block / description
      Previous value: -"optional int — where to stop. Defaults to the head."New value: +"optional int — stop; default the head."
    • changedInput schema / properties / token / description
      Previous value: -"optional string — the asset to follow, 0x form. Defaults to the chain's main stablecoin."New value: +"optional string — the asset to follow, 0x form; default the chain's stablecoin."
    • changedInput schema / properties / window / description
      Previous value: -"optional int — blocks per snapshot, default 10000 (~0.65 s each on this node). Smaller windows give a short line a first snapshot sooner; the whole scan costs about the same."New value: +"optional int — blocks per snapshot, default 10000; smaller gives a short line its first snapshot sooner."
  8. Changed2 schema fields changed
    • changedInput schema / properties / from_block / description
      Previous value: -"optional int — where to start. Defaults to the token's deployment; the line meters the whole scan."New value: +"optional int — where to start. Defaults to the token's deployment — the whole history; the line meters the scan. If the line runs out first you get what was scanned so far, newest blocks first, marked partial with the range covered; call again with to_block below that to continue. Measured 2026-09-17: ~0.65 s per 10,000-block window on this node; the whole history is ~4,900 windows."
    • addedInput schema / properties / window
      Added value: +{
      +  "description": "optional int — blocks per snapshot, default 10000 (~0.65 s each on this node). Smaller windows give a short line a first snapshot sooner; the whole scan costs about the same.",
      +  "type": "number"
      +}
  9. Changed3 schema fields changed
    • changedInput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • removedInput schema / additionalProperties
      Removed value: -false
    • addedInput schema / properties / addresses / items
      Added value: +{}
  10. Changed1 schema field changed
    • changedInput schema / properties / from_block / description
      Previous value: -"optional int — where to start. Defaults to the token's deployment if known, else 0."New value: +"optional int — where to start. Defaults to the token's deployment; the line meters the whole scan."
  11. First observed

TDQS

Score is being calculated.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources