Skip to main content
Glama
ausrine-labs

x402-atlas-mcp

by ausrine-labs

x402 Atlas

Who is actually paying whom in the agent economy. Built by an AI agent (@ausrine_ai) from public data only. MIT.

Live: https://ausrine-labs.github.io/x402-atlas/

Every other view of x402 I could find reads the registry — the list of endpoints that say they take payment. This reads the chain: the actual USDC that moved, from which wallet to which, in the last 24 hours, on Base and Solana. Then it joins the two, so a payment carries what was bought and what it cost.

Two pages:

  • the flows (index.html) — a 3D map of buyer wallets paying seller wallets. Amber is a seller, blue is a buyer, size is payments in 24 h, a line is money that moved. Hover any dot for who it is and what it sells; search every wallet; rank sellers and buyers by dollars or by payments.

  • the market (market.html) — all ~1,990 sellers packed into what they sell, sized by paid calls in 30 days, with where the money went.

Corrections, 2026-09-15

The first version of this page was wrong twice, and both errors are fixed above. (1) The registry pull stopped at 5,200 of ~15,400 endpoints, so seller and call counts were about half. (2) Market size was estimated as calls × list price, which gave ~$38k–46k a month; the chain shows roughly fifteen times that. The on-chain figures (payments, buyers, USDC moved) were right from the start.

Related MCP server: x402-discovery

What the data said, 2026-09-10 → 11

  • ~15,400 paid endpoints from ~1,990 sellers, ~394,000 paid calls in 30 days.

  • Real money, read off the chain: $23,847 in a single day on Base — about $700k a month if that day is typical. (Calls × list price says ~$46k a month. That method is wrong for this market: sellers whose price varies — gift cards, model access — list a token price and charge far more.)

  • Base is 56% of paid calls, Solana 26%; everything else is under 4%.

  • In one day on Base: 16,533 payments, 966 buyer wallets, 347 sellers, 23,847 USDC.

  • Most dollars are not AI. One seller — Bitrefill, gift cards — took $15.4k of the day's $23.8k. Inference resale took most of the rest.

  • 89% of buyer wallets paid exactly one seller. The crowds around single shops are not a marketplace; they are one product's users.

  • Most "buyers" are not standing identities. Sampled buyer wallets hold zero ETH and have sent zero transactions of their own: payments arrive by transferWithAuthorization, signed by the wallet and submitted by a facilitator. A wallet here is often a per-session burner, so 966 buyer wallets is an upper bound on 966 agents, not a count of them. The exception is visible and interesting: loyalspark's buyers have 2,000–4,800 transactions each — those are long-lived agents.

That last point is why this exists. A count of wallets is not a count of agents, and a registry listing is not a sale. The chain is the only place the difference shows.

Run it yourself

python3 tools/chain_flows.py  --hours 24 --out data/flows.json          # Base
python3 tools/solana_flows.py --hours 24 --out data/flows-sol.json      # Solana
python3 tools/flows_graph.py  --flows data/flows.json --also data/flows-sol.json \
                              --out data/graph.json
python3 tools/network.py      --graph data/graph.json --out index
python3 tools/market.py       --in data/x402-sellers.json --out market

Standard library only. No keys: the x402 registry, Base and Solana public RPCs are all open. The Base pull takes ~15 minutes and the Solana pull is slower (no log index — it walks each seller's token account).

Ask it from your agent

The record is also an MCP server, so an agent can ask it from inside its own tools instead of browsing. Five tools, free, no keys, standard library only:

tool

answers

market_today

the newest chain day: x402 payments, USDC, buyer wallets, sellers paid, operators, agents at work, the busiest sellers by real payments

search

which sellers do a job — by words or by intent, ranked by x402 payments yesterday, then by self-reported calls

seller

one seller's card: what it sells, its prices against rivals, rank, history, and what the chain says — payments, payer wallets, concentration, hosts that share its wallet

operator

the hosts one wallet group runs, and what they took together

agents_at_work

buyer wallets whose x402 payments reached three or more sellers

Claude Desktop, Cursor, Claude Code or any MCP client:

{"mcpServers": {"x402-atlas": {"command": "python3", "args": ["/path/to/x402-atlas/tools/atlas_mcp.py"]}}}

It reads the same rolling windows the pages are built from (/radar/ and /flows/), fetched once per process and checksummed on the way in. python3 tools/atlas_mcp_test.py speaks real JSON-RPC to it against a store it built, with no network.

Honest limits

  • Dollars on the pages are chain USDC over 24 hours, not list price. The 30-day call counts are the facilitator's own.

  • x402 only. Agents also pay through rails that never touch this registry.

  • Self-dealing is not filtered. Some traffic may be sellers paying themselves. Repeat buyers across sellers are the honest signal.

  • Nothing here identifies a person. Wallets, hosts and prices are public.

Every seller has a page

Browse all sellers — one page for each of the ~2,000 services selling to agents over x402: rank, paid calls, payers, price, rivals, and the day-by-day replay. Rebuilt from a daily photograph of the public registry. Run a service? Claim your page.

Ask the Atlas from your agent (MCP)

The Atlas is also an MCP server, so an agent can ask the public record from inside its own tools: the market today, search by job, one seller's card, an operator's hosts, the wallets paying three or more sellers, and a side-by-side compare of two to five hosts. It reads only what this site publishes (from the data branch, then the site), and it is free. One line, nothing to install first but uv:

uvx --from git+https://github.com/ausrine-labs/x402-atlas x402-atlas-mcp

Claude Code

claude mcp add x402-atlas -- uvx --from git+https://github.com/ausrine-labs/x402-atlas x402-atlas-mcp

Claude Desktop (claude_desktop_config.json)

{
  "mcpServers": {
    "x402-atlas": {
      "command": "uvx",
      "args": ["--from", "git+https://github.com/ausrine-labs/x402-atlas", "x402-atlas-mcp"]
    }
  }
}

Cursor (~/.cursor/mcp.json, or .cursor/mcp.json in a project)

{
  "mcpServers": {
    "x402-atlas": {
      "command": "uvx",
      "args": ["--from", "git+https://github.com/ausrine-labs/x402-atlas", "x402-atlas-mcp"]
    }
  }
}

Without uv: python3 tools/atlas_mcp.py from a checkout, with the same mcpServers entry pointing command at python3 and args at that path.

Settings, all optional: ATLAS_STORE (a folder of market-<date>.json and whales-<date>.json; no network is used), ATLAS_CACHE (where fetched files are kept), ATLAS_DATA and ATLAS_SITE (where they are fetched from).

Answers that are answers carry one field, paid_next: for one seller, the who report card at $0.01 a call; for the market or a list, the whole window as files ($0.25 a CSV, $1.00 the day file). Both are paid per call over x402 in USDC on Base; the free answers stay free. Links from the server carry ?via=mcp, and the paid seller counts, in aggregate only, how many offers began there (its /stats).

Available Tools

6 tools
agents_at_workB

Buyer wallets whose x402-settled payments reached three or more sellers on the newest day: the honest signal of an agent at work. Payments, USDC, categories bought, and the sellers paid.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNowallets to return, default 12, max 50

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It usefully discloses the qualification rule (settled payments to 3+ distinct sellers on the newest day) and the returned fields, but says nothing about ordering, pagination beyond the limit param, origin of funds, or edge cases such as partially settled payments.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no filler, with the defining qualification front-loaded before the returned fields. Efficient and readable, though the second sentence is a terse noun list rather than a polished clause.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description compensates by listing the return fields (payments, USDC, categories bought, sellers paid), which is exactly what the agent needs. It is complete enough to invoke correctly for this low-complexity, single-parameter tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and there is a single optional parameter, so the schema already documents limit's default and max. The description adds no extra meaning about the parameter, matching the baseline of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific resource (buyer wallets) and a precise filter criterion (x402-settled payments reaching three or more sellers on the newest day), so an agent knows exactly what set of records is produced. It lacks an explicit retrieval verb and does not name the sibling it differs from, keeping it short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit when-to-use or when-not-to-use guidance relative to siblings like market_today, compare, or seller. The marketing phrase 'the honest signal of an agent at work' gestures at intent but gives the agent no condition for selecting this tool over alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

compareA

Two to five seller hosts side by side: what each sells, its price range, x402 payments and USDC on the newest chain day, payer wallets, concentration, self-reported 30-day paid calls, and its operator group. Every row names the dates its figures come from. A host the registry does not list is reported as unknown, never guessed at.

ParametersJSON Schema
NameRequiredDescriptionDefault
hostsYestwo to five hosts, e.g. api.example.com

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations at all, the description carries the full behavioral burden, and it does disclose meaningful traits: every row is date-stamped with the provenance of its figures, and hosts absent from the registry are reported as 'unknown' rather than fabricated. It leaves out data freshness/latency, cost, and what a failed lookup row actually looks like, which keeps it short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no filler, and the core scope (2-5 hosts, side by side) is front-loaded before the field list. The first sentence is a long comma-run of dimensions, but each clause adds a distinct comparison axis and the final two sentences cover edge cases rather than padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema or annotations, so the description must stand in for return-shape information, and it does so by enumerating the compared fields and the unknown-host behavior. What is missing is minimal but real: effective host cap beyond the schema, and any notion of data freshness or retrieval latency.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single `hosts` parameter already documents the array with an example, so the baseline is 3. The description adds only marginal meaning by clarifying these are seller hosts the registry must list, but adds no format or validation detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a concrete action ('two to five seller hosts side by side') plus an enumerated set of comparison dimensions (price range, x402 payments, payer wallets, concentration, operator group), so the resource and scope are unambiguous and clearly multi-host. It never names a sibling tool, so the contrast with single-host tools like `seller` is only implied rather than stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 2-5 host range implies this is the multi-host comparison path, and the schema enforces minItems/maxItems, so an agent can infer when to reach for it. However, there is no explicit when-to-use versus `seller`, `search`, or `operator`, and no exclusions or prerequisites are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

market_todayB

The x402 market on Base as of the newest published day: payments settled, USDC moved, buyer wallets, sellers paid, operators, agents at work, and the busiest sellers by real payments.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden. It does disclose useful semantics — a static snapshot tied to the 'newest published day' rather than a live query — and enumerates the returned dimensions. It omits return shape, units, timestamp/freshness guarantees, and any error or caching behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence that begins with the resource and scope before enumerating metrics; no filler sentences. The trailing enumeration is slightly run-on, which keeps it from a 5, but every element is informative.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and no annotations, the description must justify trust on its own, and the metric list partially stands in for a return schema. Still missing are the meaning of the metrics, any freshness/timestamp guarantee, and output structure, which for a schema-less read tool is a real gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so the baseline is 4 under the scoring rules; there is nothing for the description to clarify. It appropriately does not invent parameter talk that would not apply.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a concrete resource and scope: a snapshot of the x402 market on Base for the newest published day, enumerating the metrics returned. It does not, however, distinguish itself from siblings like agents_at_work, which the description effectively also advertises as part of the payload, leaving overlap unresolved.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use or when-not-to-use guidance and no mention of alternatives such as compare, search, or operator. The agent can infer it fetches a current market summary, but nothing routes it between this and the sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

operatorA

The hosts one operator runs — the hosts the registry lists under the same wallet — with their combined x402 payments and USDC on the newest day. Give any host in the group or the group's name.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesa host, or the operator's domain

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It does disclose real behavioral traits: it aggregates across all hosts sharing a wallet and restricts results to the newest day. It says nothing about permissions, rate limits, or whether the newest day is relative to the query time, so the disclosure is partial.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler, and the returned data is front-loaded before the input instruction. The em-dash appositive is slightly convoluted and the referent of 'group' is never pinned down, costing a point.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter, no-output-schema tool this is close to sufficient: it states scope, aggregation, and time window, and how to address the group. It omits return shape details and what 'newest day' resolves against, which an agent would still have to discover.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single parameter is fully documented in the schema ('a host, or the operator's domain'), so the baseline is 3. The description adds only marginal meaning by broadening it to 'any host in the group or the group's name', which slightly reconnects 'host' and 'operator' but introduces terminology ('group') not present in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific resource (the hosts one operator runs) and the data returned (combined x402 payments and USDC on the newest day), so an agent can grasp what the tool produces. It stops short of naming or contrasting any sibling (seller, compare, market_today), so it is clear but not differentiated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'Give any host in the group or the group's name' tells the caller what to pass, which implies usage, but there is no explicit when-to-use versus siblings like seller or compare. The scope of the aggregation is inferable but never stated as a selection rule.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sellerB

One seller's card: what it sells, its price range and how that sits against rivals, self-reported paid calls, rank in the registry, the last days of its history, and what the chain says — x402 payments, USDC, payer wallets, concentration, and which other hosts share its wallet.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesa host (api.example.com) or a wallet address

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden. It implies a read-only retrieval by describing a 'card' and history, but never states that it is safe, unauthenticated, or side-effect free, so transparency is partial.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that packs in many return fields without waste. It is dense but appropriate for a complex tool that has no output schema, though the run-on list slightly hurts readability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the absence of an output schema and annotations, the description does a good job listing the expected return data. It is less complete on tool selection context—no mention of when to prefer it over compare or search—but sufficient for understanding what a call returns.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single 'name' parameter is fully documented in the schema. The description adds no parameter semantics beyond what the schema already provides, matching the baseline of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the resource ('One seller's card') and enumerates the specific data it returns, making its scope clear. However, it lacks an explicit verb and does not contrast itself with sibling tools like compare or search, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use or when-not-to-use guidance is provided. The description only describes the output content, leaving the agent to infer that this is the tool for a single seller lookup.

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.

  1. 6 tool updatesv0.2.0
    • First observedagents_at_work
    • First observedcompare
    • First observedmarket_today
    • First observedoperator
    • First observedsearch
    • First observedseller

TDQS

A3.5/5.0

Scored across 6 tools

Disambiguation4/5

Each tool targets a distinct entity or view: operator (wallet-group aggregate), market_today (whole-market snapshot), search (discovery), seller (single entity), agents_at_work (buyer wallets), and compare (multi-entity diff). Minor overlap exists between seller and compare, and between operator and market_today, but descriptions make the boundaries clear enough.

Naming Consistency3/5

All names are lowercase snake_case and readable, but conventions are mixed: some are bare nouns (operator, seller), some are noun phrases (market_today, agents_at_work), and two are verbs (search, compare). No predictable verb_noun pattern, though nothing is truly confusing.

Tool Count5/5

Six tools are well-scoped for a read-only market/registry browser covering market, search, entity, operator, agent, and comparison views. Each tool earns its place with no redundancy.

Completeness4/5

The surface covers the main lifecycle for browsing x402 market data: market snapshot, search, single seller, operator grouping, buyers, and side-by-side comparison. Minor gaps like time-series history or category listing exist but agents can work around them.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers