mcpbeat Sign in

Stablecoin Scanner MCP Server

answering

Stablecoin Scanner is answering right now. Last checked 12 min ago. It exposes 8 tools.

Stablecoin risk for agents: freezes, OFAC, exposure, allowances, transfers, graph. 7 chains.

Uptime history 41 days of history
41 days agonow
100.0%
Uptime 24h
91 of 91 checks
8
Tools
read from the server
128 ms
Response time
average over 24h
open, no key
Access
streamable-http

What changed 26

Every tool that appeared, vanished or quietly changed what it asks for. Recorded since 5 October 2026. No other catalogue keeps this.

9 Nov 2 tool descriptions were rewritten get_address_exposure, get_address_risk
19 Oct a tool description was rewritten get_address_risk
18 Oct a tool description was rewritten get_address_risk
12 Oct a tool description was rewritten get_address_compliance
7 Oct 8 tool descriptions were rewritten get_address_approvals, get_address_compliance, get_address_exposure and 5 more
7 Oct a tool changed version
5 Oct 7 tools changed the parameters they ask for get_address_approvals, get_address_compliance, get_address_exposure and 4 more
5 Oct 4 tool descriptions were rewritten get_address_exposure, get_address_risk, get_sync_status and 1 more
5 Oct a tool changed version

Nothing serious here today

Today is the operative word: we check Stablecoin Scanner every 15 minutes and re-read its code on every release. Watch it and you find out the day that stops being true.

Three servers free · no card

Connect this server

Endpoint below is the one we actually reach during checks — not the one copied from a README. Last verified 12 min ago.

run in your terminal
claude mcp add stablescan --transport http https://stablescan.achivx.com/mcp
Settings → Connectors → Add custom connector, then paste this address
https://stablescan.achivx.com/mcp
~/.codex/config.toml
[mcp_servers.stablescan]
url = "https://stablescan.achivx.com/mcp"
.cursor/mcp.json
{
  "mcpServers": {
    "stablescan": {
      "url": "https://stablescan.achivx.com/mcp"
    }
  }
}
.vscode/mcp.json
{
  "servers": {
    "stablescan": {
      "type": "http",
      "url": "https://stablescan.achivx.com/mcp"
    }
  }
}

Available tools 8

Read directly from the server with tools/list, grouped by what they act on. If a tool disappears, we record the date.

address
get_address_approvals
Open ERC-20 and Permit2 allowances one address has granted on one chain, one row per spender and token with the raw value, unlimited/oversized/old flags, spender_class and a band (critical|high|low|expired|none): unlimited to a flagged or unknown spender is the main drain vector, a known service spender (DEX router, Permit2) is normal, an expired Permit2 sub-allowance reads 'expired'. Use it when the question is what a wallet has approved and who could pull its stablecoins. Not for a risk tier — the band is informational and never moves get_address_risk. Not for issuer freezes: get_address_compliance. Not for taint: get_address_exposure. address is the allowance owner (the granter), never the spender. Heavy read: under load it answers busy or timeout — retry with backoff. No auth; 1200 requests/min shared by all tools. A heuristic band over decoded on-chain Approval facts, not an AML or legal determination.
get_address_compliance
Issuer freeze/seize facts for one address on one chain, plus the OFAC SDN flag: freeze[] (one row per freeze-capable stablecoin, status frozen|seized|clear|unknown, with frozen_usd6 = the balance locked now where it was read), not_freezable[] (stablecoins whose issuer cannot freeze on this chain, e.g. the Binance-Peg wrappers on BNB Chain — enforcement is off-chain), frozen_elsewhere[] (the same address bytes under a standing freeze on another indexed chain; EVM and Tron share them, Solana never) and freeze_proposals[] (issuer multisig proposals naming the address, USDT on Ethereum and Tron: executed ones; pending ones only where the operator publishes them in full — elsewhere a pending proposal's address is shown once it executes). Use it when the question is whether an issuer or OFAC acted on this address, or how much is frozen. Not for a risk tier: get_address_risk. Not for taint distance: get_address_exposure. Not for when the OFAC list was refreshed: get_sanctions_status. Decoded on-chain issuer acts with provenance, no heuristics. 'unknown' means no act names the address and that pair's freeze history is not fully backfilled yet — absence of evidence is not 'not frozen'; an empty frozen_elsewhere[] or freeze_proposals[] means none in what is indexed, not clean everywhere. Each chain is its own issuer act: pass chain to ask Ethereum or Tron about the same bytes, chains_with_data says where. Heavy read: under load it answers busy or timeout — retry with backoff. No auth; 1200 requests/min shared by all tools. Not an identity, AML or legal determination.
get_address_exposure
Taint exposure of one address on one chain: a bounded backward walk over the value graph to the nearest OFAC-sanctioned or hack/drainer/mixer root, answered as a class (sanctioned|direct|indirect|negligible|unknown|none), the nearest hop and a value-proportional haircut fraction. Use it to explain how closely an address is tied to a sanctioned or hack root and by how much value. Not for one go/no-go tier — get_address_risk already includes this walk. Not for the counterparties themselves or a chosen depth, token or window: get_wallet_graph_walk. Not for issuer freezes: get_address_compliance. 'unknown' means the walk did not complete — OFAC list unloaded, OFAC list stale (ofac_list_stale: last refreshed over 7 days ago, see sanctions_list_as_of), time_budget, frontier_cap, Solana coverage pending or partial, short history, or no hack/drainer/mixer label loaded for this chain — never a false 'none'; incomplete_reasons names which (time_budget may complete at a quieter moment, frontier_cap repeats). Depth is fixed at 3 hops and the walk never crosses chains: ask again with chain set for each network in chains_with_data. On Solana (chain -1) the days 2026-07-20..2026-09-14 are incomplete: their raw rows were offloaded before a fix reached production on 2026-09-17, they are not restored, and answers do not mark them. This read is not cut by the graph horizon and includes them, so its Solana figures from those days are floors, and a root or counterparty missing from them is not evidence that there was none. A verdict is reused for up to 60 s (10 s after a time_budget cut). Heavy read: under load it answers busy or timeout — retry with backoff. No auth; 1200 requests/min shared by all tools. A heuristic signal, not an AML or legal determination.
get_address_risk
Unified risk tier for one address on one chain — unknown|none|low|medium|high|severe — from decoded facts (OFAC listing, issuer freeze/seize on this chain, exposure to a sanctioned or hack root) and attributed labels with provenance (labels alone cap at medium; a lone-source accusation adds no tier). Use it for one go/no-go read before accepting or sending funds. Not for freeze proposals, frozen balances or a freeze on another chain (frozen_elsewhere): get_address_compliance. Not for taint hops or the haircut: get_address_exposure. Not for open allowances: get_address_approvals. 'unknown' means the check did not finish, never 'checked clean'; evidence and incomplete_reasons name the cause (e.g. time_budget: the exposure walk was cut, a quieter moment may complete it). The freeze input is this chain's per-token status alone: frozen/seized argues for high (not a row with own_token_contract: the issuer's act on its own token contract), and an 'unknown' status or a pair whose freeze history is not backfilled turns a would-be 'none' into 'unknown' — so a Solana tier, where every freeze pair is unknown, is never 'none'. The exposure walk behind the tier is fixed at 3 hops; pick depth and window with get_wallet_graph_walk. On Solana (chain -1) the days 2026-07-20..2026-09-14 are incomplete: their raw rows were offloaded before a fix reached production on 2026-09-17, they are not restored, and answers do not mark them. This read is not cut by the graph horizon and includes them, so its Solana figures from those days are floors, and a root or counterparty missing from them is not evidence that there was none. A verdict is reused for up to 60 s (10 s after a time_budget cut). Heavy read: under load it answers busy or timeout — retry with backoff. No auth; 1200 requests/min shared by all tools. Not an identity, AML or legal determination.
recent
get_recent_transactions
Recent stablecoin transfers on one chain, newest first, filterable by payer and/or recipient, cursor-paginated. Use it for the latest transfers of an address or of the whole chain, with a tx_hash to cite. Not for who an address settles with over time: get_wallet_graph_walk. Not for how fresh the feed is: get_sync_status. Not for any verdict about an address: get_address_risk. Answer: items[], each row tx_hash, log_index, block_number, block_time (RFC 3339), payer, recipient, amount {amount (minor units, string), decimals, token (symbol)}, token (the contract address), finality, and usd_amount where priced. The chain is the one asked for — rows do not repeat it. payer and recipient narrow together; omit both for the chain-wide feed; pass next_cursor back unchanged as cursor for older rows, and a page without it is the last. Heavy read: under load it answers busy or timeout — retry with backoff. No auth; 1200 requests/min shared by all tools. Plain on-chain Transfer facts, no scoring.
sanctions
get_sanctions_status
OFAC SDN list coverage as this scanner holds it: evm_count, solana_count, tron_count and total addresses loaded (the free public 0xB10C list of US-Government public-domain data), updated_at of the last refresh (null until the first ingest) and the source. Use it to date the sanctions input behind a verdict, or to tell a clear OFAC flag from an unloaded list. Not for whether one address is listed: get_address_compliance (the flag) or get_address_risk (the tier). Not for indexer freshness: get_sync_status. No parameters; one answer covers every chain. Light read, never waits for a slot. No auth; 1200 requests/min shared by all tools. Verify against the official SDN list before acting on it; not legal advice.
sync
get_sync_status
Indexer freshness for one chain: freshness_seconds (the age of the newest indexed transfer; null when it could not be read for this answer), the indexer's head and finalized blocks, its safe block and its lag in blocks (lag_blocks = head_block - last_indexed_block). Use it before trusting how recent an address answer is, or to tell an empty feed from a stalled indexer. Not for how fresh the OFAC list is: get_sanctions_status. Every address verdict already carries freshness_seconds, so call this only for the block numbers or for a chain you have not asked about yet. On Solana (chain -1) safe_block is the finalized slot, and lag_blocks is near 0 by construction and never negative, so it is not a freshness signal there: read freshness_seconds. On the EVM chains and Tron a negative lag_blocks means the node's head went back. chain is the only parameter; omit it for Base. Light read, never waits for a slot. No auth; 1200 requests/min shared by all tools.
wallet
get_wallet_graph_walk
Bounded walk over the indexed settlement graph of one stablecoin from one wallet on one chain: payer<->recipient hops with value-weighted scores, entity-aware node keys, a stop at known services and sanctioned-node markers. Use it to explain who an address settles with and through which hops. Not for a verdict: get_address_risk. Not for the taint class or haircut: get_address_exposure. Not for a flat list of transfers with tx hashes: get_recent_transactions. token is required and must be a stablecoin enabled on that chain (a refusal names them); hops=0 with stop_on_sanctioned=true is the cheapest check of the subject itself; subjects over the degree gate (~50k edge-rows) return hop 1 only with frontier_truncated=true. Heavy read: under load it answers busy or timeout — retry with backoff, a narrower window or a lower frontier_cap. No auth; 1200 requests/min shared by all tools. An explainability primitive, not a detector verdict, identity/control assertion, AML decision or legal advice. window_from present means the answer was built from that date, the edge-grain horizon, not from the start of the requested window; the default window all, 90d and 1y included (/v1/methodology edge_grain_horizon). When window_from is present, read the graph as covering that span only — do not treat the absence of a counterparty, a path or a sanctioned node as evidence about anything before that date. volume on nodes is the token's raw minor units (divide by 10^decimals); volume_usd6 is the same amount in USD with 6 decimals at peg 1. On Solana (chain -1) the answer carries coverage_status for the subject address only, never for its counterparties: pending — its history is still being filled, so an empty or small answer is not final; partial — filled to a documented bound. The walk shows a finished fill after the next Solana rollup pass (about 10 minutes), and never shows history older than window_from. This read never starts a fill, so pending can also mean none was asked for yet: one compliance read of the address asks for it. A Solana answer without coverage_status could not read it in time — treat it as pending. On Solana (chain -1) the edge grain of 2026-07-20..2026-09-14 is incomplete: those days hold part of their transfers or none, because their raw rows were offloaded before a fix reached production on 2026-09-17; they are not restored, and answers do not mark them (decision of 2026-09-17). Solana's grain is never trimmed, so there the horizon that window_from reports is not where retained data ends: once window_from is later than 2026-09-14 the answer holds none of those days. An answer that reaches them — window_from on or before 2026-09-14, or no window_from over a window that includes them — counts them as floors: at least this much, never the whole, and a counterparty, path or sanctioned node missing from those days is not evidence that there was none.

Endpoints

URLTransportStateLatencyChecked
https://stablescan.achivx.com/mcp streamable-http answering 142 ms 12 min ago

Alternatives to Stablecoin Scanner

same job, measured the same way
Stables
by stables

Stablecoin payments for AI agents: customers, quotes, transfers, payment routes.

261 installs/wk answering
BlockchainAnalysis
by blockchainanalysis

Compliance MCP for AI agents: sanctions & KYT screening on 50+ chains, stablecoin-freeze, oracle.

13 tools answering
BaseLens
by vercel-baselens-api

Base on-chain data for agents: balances, prices, transfers, Basenames, contracts. x402 pay-per-call.

11 tools answering
Bvcc Agent Wallet
by blockventurechaincapital

Non-custodial BVCC Agent Wallet on-chain for AI agents: balances, transfers, approvals, swaps.

622 installs/wk local only
ExposureGuard
by exposureguard

Domain security scanning for AI agents. A-F grades, 8 checks, fix snippets.

124 installs/wk local only
MCP Unblockpay
by codespar

MCP server for UnblockPay — fiat-to-stablecoin onramp/offramp, wallets, transfers

155 installs/wk local only
Nulucre Wallet Reputation
by vjshaw

Wallet trust scores for AI agents. Stellar, XRPL, EVM 81+ chains. OFAC sanctions. x402 payments.

5 tools answering
Chainanalyzer MCP
by rascal-3

Blockchain AML for AI agents: risk scoring, sanctions, tx & bridge tracing across 12 chains.

523 installs/wk local only

Stablecoin Scanner — questions

Answers built from our own checks of this server.

What can Stablecoin Scanner do?
It exposes 8 tools, read directly from the server on our last check. Among them: get_address_approvals, get_address_compliance, get_address_exposure, get_address_risk, get_recent_transactions, get_sanctions_status and 2 more. The full list with descriptions is on this page — we take it from the server itself via tools/list, not from a README. How MCP servers expose tools in the first place →
Is Stablecoin Scanner working right now?
We send a real MCP handshake every 15 minutes. Over the last 24 hours 91 of 91 checks got a reply (100.0%), average response time 128 ms. The bar chart above shows every period we have measured.
How do I connect Stablecoin Scanner?
Copy the ready config from this page. We generate it for Claude Code, Claude Desktop, Codex, Cursor and VS Code, each in the form that client actually reads. It is a remote server, so there is nothing to install — the client connects to the address.
Does Stablecoin Scanner need an API key?
No. Stablecoin Scanner completed a full MCP handshake with us as an anonymous client and listed its tools without asking for anything. All 8 of them are readable on this page. This is what we observed, not what the docs claim.
How fast is Stablecoin Scanner?
It answers our handshake in 128 ms on average, which is faster than 87% of all working MCP servers we measure. That puts it in the quick quarter of the ecosystem. The comparison comes from our own checks across the whole registry, every 15 minutes.