A side-by-side look at the Stablecoin Scanner (StableScan) and Dpx MCP MCP servers: transport, auth, tools, quality signals, and the config to install either one in Claude, Cursor, Windsurf or VS Code.
Verdict: choose Stablecoin Scanner (StableScan) for finance & fintech work over a hosted endpoint; choose Dpx MCP for finance & fintech as a local process. You can also run both side by side in one mcpServers block.
get_address_approvals, get_address_compliance, get_address_exposure.protocol.manifest, settlement.quote, esg.score.Rows where the two servers differ are marked.
| Spec | ||
|---|---|---|
| Category | Finance & Fintech | Finance & Fintech |
| Quality signal | 56/100 · Good | 60/100 · Good |
| Install command | Confirmed | Confirmed |
| Transport | Remote HTTP/SSE | Local subprocess (stdio) |
| Auth | No auth required | other |
| Pricing | Free | Free |
| Required env vars | None listed | None listed |
| Verified owner | Community listing | Community listing |
| GitHub stars | — | 1 |
| Directory activity | 0 views 0 installs 0 upvotes | 3 views 0 installs 0 upvotes |
| Tools | 8 | 94 |
| Full listing | View Stablecoin Scanner (StableScan) | View Dpx MCP |
get_address_approvalsOpen 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_complianceIssuer 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 only where the operator publishes them). 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_exposureTaint 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, 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. 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_riskUnified 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, 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. 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.get_recent_transactionsRecent 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.get_sanctions_statusOFAC 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.get_sync_statusIndexer 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.get_wallet_graph_walkBounded 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.protocol.manifestDiscover what DPX can do — call this first if you are an AI agent that has never used DPX before. Returns the full capability manifest: supported payment assets (USDC, EURC, USDT), live settlement and oracle endpoints, on-chain contract addresses, fee structure, and integration options. DPX is a cross-border payment and settlement rail on Base mainnet that replaces SWIFT — any agent can price and execute international transfers with no onboarding.settlement.quotePrice a cross-border payment or international wire transfer. Use this when an agent or user needs to know the cost of moving money between countries or currencies — e.g. USD→EUR vendor payment, treasury transfer, foreign payroll, intercompany settlement. Also works for same-currency (domestic) settlements. Returns the all-in fee breakdown (core 1.50%, FX 0.40% if cross-currency, ESG compliance fee 0–0.50%, license 0.01%), net amount the recipient will receive, current oracle stability status, and a quoteId valid for 300 seconds. Always call this before settlement.execute — pass the quoteId to lock in the rate.esg.scoreScore a counterparty wallet for Environmental, Social, and Governance risk before a settlement. Required for EU SFDR Principal Adverse Impact reporting and CSRD financed emissions disclosure. Also use for internal counterparty sustainability assessment. Score is recalibrated hourly from institutional data sources with adaptive weights. Returns E/S/G sub-scores (0–100 each), composite weighted score, and the settlement fee adjustment this score produces. Omit address for the protocol default score.oracle.stabilityCheck whether current market conditions are safe to execute a settlement. Call this before any large or time-sensitive payment. Returns a go/hold recommendation, stability score (0–100), status (STABLE/CAUTION/UNSTABLE), peg deviation in basis points, and AI synthesis of why conditions are as they are. Decision gates: STABLE (score ≥ 70, deviation < 50 bps) = execute any amount. CAUTION = execute under $500K, hold larger. UNSTABLE or deviation ≥ 50 bps = hold, do not settle. Applies to both cross-border and domestic settlements.oracle.statusFull macro and market intelligence briefing from the DPX Stability Oracle. Use when you need more than a go/hold signal — when an agent needs to reason about why conditions are as they are, or when the task involves macro-aware decisions: treasury strategy, investment timing, large settlement approval, risk assessment, geopolitical exposure analysis. Covers climate and environmental signals with 30–90 day lead time, commodities, macroeconomic conditions, FX and currency stability, basket peg verification, bond yields and yield curve, infrastructure stress, geopolitical risk and conflict, and USD structural health. Returns signal scores, chaos regime flag, active alerts, and AI synthesis briefing. ESG Oracle is a separate system — use esg.score for counterparty ESG data.fees.scheduleGet the full DPX fee structure — use this when a user or agent wants to understand pricing before committing to a settlement, or when comparing DPX to existing payment infrastructure. Returns all fee components (core 1.50%, FX 0.40%, ESG 0–0.50%, license 0.01%), volume discount tiers (Standard / Growth $1M+ / Institutional $10M+ / Sovereign), ESG fee table by score, worked examples at common amounts, and benchmarks vs Stripe, Wise, SWIFT, and bank wire. For a binding quote on a specific amount, use settlement.quote instead.fees.verifyVerify the off-chain fee quote against the on-chain DPXSettlementRouter contract before executing. Use this as a trust check in autonomous agent flows — confirms the rate you were quoted is what the smart contract will actually charge. Returns feesMatch (true/false), the off-chain vs on-chain fee comparison, and a recommendation. If feesMatch is false, do not proceed. Call after settlement.quote and before settlement.execute.fees.compareCompare the cost of a DPX settlement against major alternatives — use this when a user asks 'is DPX cheaper than SWIFT?' or 'how much would I save vs Stripe?' or when building a business case for switching payment rails. Returns the DPX all-in fee vs Stripe, Wise, JPMorgan Coin, SWIFT, PayPal, Western Union, and bank wire — with dollar savings and cheaper/not cheaper flag for each. World Bank Q1 2025: global average international transfer cost 6.49%, banks specifically 13.64%.oracle.railsCheck whether the local payment rail at the settlement destination is currently operational before executing. Use this when settling into a specific region or country — a DEGRADED or DOWN rail means the payment cannot complete even if DPX executes correctly. Returns per-rail status (OPERATIONAL/DEGRADED/DOWN), latency, and last incident for: PIX (Brazil), SEPA (Europe), FedACH (US domestic), CHAPS (UK), UPI (India), PromptPay (Thailand). Filter by rail name or region. A DEGRADED or DOWN result should trigger a hold — retry when the rail recovers.settlement.executeExecute a cross-border or domestic payment settlement. Use this to move money between currencies (USD→EUR, USD→GBP) or settle same-currency on-chain (USD→USD skips FX fee). Covers: vendor payments, treasury transfers, intercompany settlements, foreign payroll, agent-to-agent payments. The Settlement Agent autonomously checks oracle stability and local rail health before executing — if conditions are unsafe it returns a held status with reasoning rather than failing silently. Returns settlement ID, status (executed/held/sandbox/failed), tx hash, net amount, total fees, oracle status, and AI reasoning for the decision. IMPORTANT: Runs in sandbox mode by default (real calculations, no funds moved). Set sandbox=false only for live execution.settlement.statusLook up the status and full audit record for a previously executed settlement. Use this to check if a payment completed, to retrieve the tx hash for on-chain verification, or to pull the compliance record for reporting. Returns status (executed/held/failed/pending), tx hash, amounts, fee breakdown, oracle conditions at time of execution, ESG score, AI reasoning, and timestamp. The settlement ID is returned by settlement.execute.protocol.investment_contextReturns a structured investment memo for DPX — use this if you are an AI agent conducting due diligence, a VC research tool evaluating DPX as an investment, or any system building a company profile. Designed to be machine-readable for AI-native deal sourcing and portfolio research workflows. Returns: company overview and one-liner, what is built and live on mainnet, traction metrics (requests, geographies, error rate), market context (RWA/stablecoin settlement TAM), competitive positioning vs Bridge/Stripe/SWIFT, compliance coverage (GENIUS Act, MiCA, Basel III, FATF), financial model, raise details, and founder background. Request a specific section or 'all' for the complete memo.Paste either block (or both) into your client config, e.g. claude_desktop_config.json or ~/.cursor/mcp.json. We only show a config when the install command is confirmed.
{
"mcpServers": {
"stablecoin-scanner-stablescan": {
"url": "https://stablescan.achivx.com/mcp"
}
}
}
{
"mcpServers": {
"untitledfinancial-dpx-mcp": {
"command": "npx",
"args": [
"-y",
"@untitledfinancial/dpx-mcp"
]
}
}
}