Agentic Finance Graph
Ledger of AI-agent money on Base: ranked agents, payments, detections, free checks before you pay
Should I use this
Quality & Safety
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"agentic-finance-graph": {
"url": "https://agenticfinancegraph.com/mcp"
}
}
}Remote endpoints
https://agenticfinancegraph.com/mcpstreamable-httpWhat it can do
Tool inventory
Tools (18)
🟢market_state(compact)
The ledger's headline figures for AI-agent money, each with its value, unit, measurement time and definition id. On Base: money agents paid to others after registration (counted), daily spending by the day it was paid (last day, 7-day and 30-day averages), the part that went into positions they still hold, what left their control, the routing hops and pre-registration history excluded, how many agents are ranked (L7+ paid someone, L8 funded, L9 repeat counterparties), agent income, x402 seller inflow, treasuries, concentration, detections and the address-poisoning watch. On other chains: ERC-8004 registrations on seven chains, what registration owners paid on BNB Smart Chain, Ethereum, Arbitrum, OP Mainnet and Polygon, and Solana agent registrations and payments.
Input Schema
{
"type": "object",
"properties": {
"compact": {
"type": "boolean",
"description": "Leave out the reading notes and the previous-sample block (figures, data quality and licence stay)"
}
},
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"source": {
"type": "string"
},
"as_of": {
"type": "string"
},
"chain": {
"type": "string"
},
"figures": {
"type": "object",
"additionalProperties": {
"type": "object",
"properties": {
"value": {
"type": [
"number",
"null"
]
},
"unit": {
"type": [
"string",
"null"
]
},
"as_of": {
"type": [
"string",
"null"
]
},
"stale": {
"type": "boolean"
},
"definition_id": {
"type": [
"string",
"null"
]
}
},
"required": [
"value"
]
}
},
"reading": {
"type": "string"
},
"since": {
"type": [
"object",
"null"
]
},
"days_still_scanning": {
"type": [
"object",
"null"
]
},
"data_quality": {
"type": "object"
}
},
"required": [
"as_of",
"figures"
]
}🟢find_agent(query)
Look up an ERC-8004 agent by token id on Base, slug, wallet address (0x...) or the name it declares. Returns whether it is ranked, its liveness level (L0-L9), bound wallet, stablecoin float, payment totals and open incidents. Up to 25 ids at once, separated by commas. A name is matched among ranked agents only, and a declared name is the agent's own claim, not verified.
Input Schema
{
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Token id (57657), slug (8004-base-57657), wallet (0x...), a declared name, or up to 25 ids separated by commas"
}
},
"required": [
"query"
],
"additionalProperties": false
}🟢agent_record(id)
The free record of one ranked agent: rank with evidence, bindings, and its 25 newest payments with counterparties. Unranked ids return not found: an agent never seen paying has no record to sell or show.
Input Schema
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Token id, slug or wallet address"
}
},
"required": [
"id"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"ranked": {
"type": "boolean",
"description": "false when the id is not among ranked agents"
},
"as_of": {
"type": [
"string",
"null"
]
},
"url": {
"type": "string"
},
"agent": {
"type": "object",
"description": "The record: rank with evidence, bindings, the 25 newest payments"
},
"note": {
"type": "string"
}
}
}🟢ranked_agents(limit, min_level, sort_by)
The top ranked agents (L7 and above: a bound wallet was seen paying money out of the agent's control after registration). Sorted by level first (L9, then L8, then L7), then by lifetime counted USD; sort_by changes the second key to distinct counterparties or number of payments. A high place means a large counted spender at that level, not a working service: read agent_record before relying on one. Free tier: up to 25.
Input Schema
{
"type": "object",
"properties": {
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 25,
"default": 10
},
"min_level": {
"type": "integer",
"minimum": 7,
"maximum": 9,
"description": "Only agents at or above this liveness level"
},
"sort_by": {
"type": "string",
"enum": [
"usd",
"counterparties",
"payments"
],
"default": "usd",
"description": "Order within each level: lifetime counted USD (default), distinct counterparties, or number of counted payments"
}
},
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"as_of": {
"type": "string"
},
"total_ranked": {
"type": "integer"
},
"returned": {
"type": "integer"
},
"withheld_by_tier": {
"type": "integer"
},
"agents": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"token_id": {
"type": "string"
},
"slug": {
"type": "string"
},
"url": {
"type": "string"
},
"liveness": {
"type": "integer"
},
"declared_name": {
"type": [
"string",
"null"
]
},
"pay": {
"type": "object"
}
},
"required": [
"slug",
"liveness"
]
}
}
},
"required": [
"agents"
]
}🟢detections(agent, limit, kind, severity, since, ...)
Anomalies our detectors logged, newest first: drain-shaped payments (each with the share of the wallet's balance it took), retry storms, mint bursts, fleet-funding fan-outs (layering_fan), owner changes under a binding, delegation to unknown code. A detection is a shape with evidence, never a verdict. Filter by agent, kind, severity, time or live incidents only; compact drops the glossaries.
Input Schema
{
"type": "object",
"properties": {
"agent": {
"type": "string",
"description": "Optional agent id (act_8453_N or token id)"
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 25,
"default": 10
},
"kind": {
"type": "string",
"enum": [
"drain_pattern",
"retry_storm",
"mint_burst",
"layering_fan",
"uri_timeout_streak",
"bind_closed_after_nft_transfer",
"god_key_unknown_7702"
]
},
"severity": {
"type": "string",
"enum": [
"info",
"notable",
"major"
]
},
"since": {
"type": "string",
"description": "ISO time; only detections at or after it"
},
"live_only": {
"type": "boolean",
"description": "Only detections that are live incidents"
},
"compact": {
"type": "boolean",
"description": "Leave out the glossaries and tier notes"
}
},
"additionalProperties": false
}🟢definition(id)
The frozen definition of a metric: what it counts, the method, what it excludes and what it does not claim. Use the definition ids returned by the other tools.
Input Schema
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Definition id, e.g. pay.usd.total.v1"
}
},
"required": [
"id"
],
"additionalProperties": false
}🟢metric_history(key, range)
The history of one measured metric from the ledger's archive (daily points, plus 5-minute points for the last 48 hours). Gaps are real gaps, never filled. An unknown key returns similar keys and the full list of archived keys.
Input Schema
{
"type": "object",
"properties": {
"key": {
"type": "string",
"description": "Metric key, e.g. actors_l7_plus or observed_pay_usd_total"
},
"range": {
"type": "string",
"enum": [
"24h",
"7d",
"30d",
"90d"
],
"default": "30d"
}
},
"required": [
"key"
],
"additionalProperties": false
}🟢since_last(metric_id, window)
One measured figure with the stored sample it moved from: current, prior, delta, delta_ratio, both timestamps, definition id, unit, and whether the move is material under the published thresholds. window: sweep (the previous stored sample, the default), 24h, 7d or 30d. No prior sample inside the window returns gap: true and no delta; nothing is interpolated. Accepts a metric key or a definition id.
Input Schema
{
"type": "object",
"properties": {
"metric_id": {
"type": "string",
"description": "Metric key (actors_l7_plus) or definition id (rank.l7plus.v1)"
},
"window": {
"type": "string",
"enum": [
"sweep",
"24h",
"7d",
"30d"
],
"default": "sweep"
}
},
"required": [
"metric_id"
],
"additionalProperties": false
}🟢counterparty_preview(address)
For one receiving address on Base (or an x402 resource URL listed in the Bazaar): how many counted payments registered agents made into it, how many distinct agents and how many at L7 or above, first and last seen, and the routing hops excluded. Counts only; the payer list with levels, binding confidence and transaction hashes is the counterparty pack. An address that only received routing hops is not a payee. Without an address: the endpoints the most ranked agents pay.
Input Schema
{
"type": "object",
"properties": {
"address": {
"type": "string",
"description": "0x address on Base, or an x402 resource URL; omit for the top endpoints"
}
},
"additionalProperties": false
}🟢agent_statement(id)
The latest 3-hour statement for one ranked agent: payments out split into spend, routing hops and payments whose receipt is not read yet; what left its control; income; open flags; the hash of the previous statement; and a Merkle proof against the window's Ed25519-signed root. Check before you pay: refuse if stale, if chain_ok is false, or if flags is not empty; then call find_agent and refuse if open_incidents is above zero. A statement covers a closed 3-hour window and publishes a few hours after it closes, so it cannot show the last few hours.
Input Schema
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Agent token id, slug or bound wallet"
}
},
"required": [
"id"
],
"additionalProperties": false
}🟢evidence_pack_quote(kind, id, payto)
Price and how to buy a dated evidence pack over x402 (USDC on Base, 1 to 25 cents). About one agent: precheck (the routine check before you pay or hire it: level, last payment, live incidents, statement freshness, and with payto what that address is), liveness, paygraph (where it pays), drain, incidents, peer, builders (which apps build its transactions, ERC-8021), exit (did its wallet empty out: every window in which a new payee took most of its outflow in 72 hours, with where the money went next; candidates, never verdicts), trace (where did the money go: its exits followed live up to three hops, with each hop's issuer freeze, swap out of a freezable token and Tron activity), bundle, reval (a live re-probe) or statement (its last 24 statements with proofs). About one address: counterparty (which ranked agents paid it) or venue (what the address is: label, contract or key, who pays it, poisoning look-alike or not, live 48-hour flow). This tool does not pay; an x402-capable client fetches the returned URL, receives HTTP 402 with the exact price, and retries with a signed payment.
Input Schema
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"enum": [
"precheck",
"liveness",
"paygraph",
"drain",
"exit",
"trace",
"incidents",
"peer",
"builders",
"bundle",
"reval",
"statement",
"counterparty",
"venue"
]
},
"id": {
"type": "string",
"description": "Agent token id, slug or wallet; for counterparty and venue, the 0x address"
},
"payto": {
"type": "string",
"description": "precheck only, optional: the 0x address you are about to pay"
}
},
"required": [
"kind",
"id"
],
"additionalProperties": false
}🟢pay_check(agent)
One free call before your agent pays or hires another: its latest statement (stale, age, chain_ok, flags), live incidents, its detections in the last 72 hours, the token approvals its wallet has given (unlimited ones, and any to a plain account), its last counted payment, and its payments seen after the statement window closed (from its 25 newest payments, so the hours a statement cannot show are not blind). Returns facts and which of the documented refuse conditions are met; the decision stays with you. The paid precheck pack adds what the address you were given to pay is.
Input Schema
{
"type": "object",
"properties": {
"agent": {
"type": "string",
"description": "Agent token id, slug or bound wallet"
}
},
"required": [
"agent"
],
"additionalProperties": false
}🟢payer_set(agent, limit)
The wallets observed paying one agent (income into its bound wallets, plus counted payments from other registered agents), up to 250, with payments, USD and first and last paid; and how much of its ERC-8004 feedback is payment-grounded (the reviewer paid the agent before rating it). Pass the addresses as clientAddresses to the Reputation Registry's getSummary to read only reviews from wallets that paid. Observed payers are a lower bound, and payment-grounded is not independent: a payer under the same operator grounds its own reviews.
Input Schema
{
"type": "object",
"properties": {
"agent": {
"type": "string",
"description": "Base ERC-8004 token id, act_8453_N, or a ranked agent's slug or bound wallet"
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 250,
"default": 50,
"description": "How many payers to list (largest by USD first)"
}
},
"required": [
"agent"
],
"additionalProperties": false
}🟢agent_stability(agent)
The behaviour clock for one ranked agent: run_days (complete UTC days since the last break in its own payment behaviour, by a CUSUM on payments, USD, payees and new-payee share against its own history), the last break's date and feature, and its heartbeat over 30 days (scheduled, irregular, bursty or sparse, with the dispersion index and the gap CV). A break is a change, not a harm; the measured false-break rate is published in the document. Definitions stability.run_length.v1 and stability.heartbeat.v1.
Input Schema
{
"type": "object",
"properties": {
"agent": {
"type": "string",
"description": "Agent token id, slug or bound wallet"
}
},
"required": [
"agent"
],
"additionalProperties": false
}🟢agent_independence(agent)
For one ranked agent: its independence score (1 if it paid, in 30 days, an address with demand from three or more operator sets; else half the best score of an agent outside its set that paid one of its payees, best path, at most three hops), the path, its L9 counterparty count under the published rule and under the cluster-aware rule, the inflation ratio between them, and the size of its operator set (same bound wallet, owner, minter or first funder, each link capped at 50). Definitions rank.independence.v1, rank.inflation.v1, cluster.ratio.v1.
Input Schema
{
"type": "object",
"properties": {
"agent": {
"type": "string",
"description": "Agent token id, slug or bound wallet"
}
},
"required": [
"agent"
],
"additionalProperties": false
}🟢ladder_dynamics
The whole-cohort document: cumulative incidence of the four competing exits (drained, abandoned, dormant, none) at 30, 60, 90 and 180 days with the numbers at risk and the restricted mean time without an exit (ladder.exit_incidence.v1); the Standardised Drain Ratio per minting address with 30 or more ranked agents, with 95% intervals (platform.sdr.v1); the day-to-day transition matrix between L7, L8, L9 and out (ladder.transition.v1); and the landmark re-check of the published survival figures (survival.landmark.v1).
Input Schema
{
"type": "object",
"properties": {},
"additionalProperties": false
}🟢verify_sum_log(agent, previous_head, previous_statement_head)
Trust nothing you did not recompute. Verifies the Ed25519 signature on the current sum-log head (the Merkle-sum root over every counted payment and the total it commits to), optionally climbs one agent's proof from its leaf to the root and the whole total, reports how many of the previous head's leaves the current head declares unchanged, changed, removed and added, and verifies the statement log's signed tree head and, given the head you kept (tree_size, root_hash), the consistency proof that our statement history was not rewritten. Keep the heads it returns and pass them next time. Definitions sumlog.v1 and agent.statement.log.v1.
Input Schema
{
"type": "object",
"properties": {
"agent": {
"type": "string",
"description": "Optional: an agent token id whose proof to climb"
},
"previous_head": {
"type": "object",
"description": "Optional: the sum-log head you kept: { leaves, root }",
"properties": {
"leaves": {
"type": "integer"
},
"root": {
"type": "string"
}
},
"additionalProperties": true
},
"previous_statement_head": {
"type": "object",
"description": "Optional: the statement-log head you kept: { tree_size, root_hash }",
"properties": {
"tree_size": {
"type": "integer"
},
"root_hash": {
"type": "string"
}
},
"additionalProperties": true
}
},
"additionalProperties": false
}🟢list_metrics(filter)
Every metric the ledger measures or archives: key, unit, definition id, whether it is a headline figure, its first stored sample, and the date from which its history compares across our own changes (comparable_since). Use a filter (part of a key, a definition id or a word from its note) to get the notes too.
Input Schema
{
"type": "object",
"properties": {
"filter": {
"type": "string",
"description": "Optional: part of a key, a definition id or a word, e.g. l8, bridge, x402"
}
},
"additionalProperties": false
}Community
Evidence