
Security News
Happy Birthday, Shai-Hulud
It has been one year since Shai-Hulud made its first appearance on npm.
@walletbureau/mcp
Advanced tools
MCP server for WalletBureau: check the behavioral risk score of a Base wallet before paying it. Pay per call with x402 or a prepaid API key.
Check who you are about to pay. An MCP server that gives your agent one tool: score the behavioral risk of a wallet on Base before sending it money.
The score comes from the full history of x402 / EIP-3009 USDC payments on Base — how long the
address has existed, who pays it, how concentrated its inflows are, whether its activity just
spiked. You get a number from 0 to 100, a verdict (ok / caution / avoid) and the risk flags
that produced them, each with a reason in plain language.
These are risk signals, not accusations. Methodology: https://walletbureau.com/methodology
npm i @walletbureau/mcp --ignore-scripts
The package ships ready-to-run JavaScript. There are no install scripts, no native modules and
no build step on your machine — --ignore-scripts changes nothing here, and that is on purpose.
claude mcp add walletbureau -- npx -y @walletbureau/mcp
Add this to your MCP configuration (claude_desktop_config.json for Claude Desktop):
{
"mcpServers": {
"walletbureau": {
"command": "npx",
"args": ["-y", "@walletbureau/mcp"]
}
}
}
That is the whole setup. With no credentials the server runs on the public free quota — a few checks per day — which is enough to try it. To keep going, pick a payment mode below.
A full check costs $0.01. The server picks its mode from the environment:
| Mode | Set this | What happens |
|---|---|---|
| Free demo | nothing | Uses the public demo quota (a few checks per day per IP). |
| Prepaid key | WALLETBUREAU_API_KEY=atk_… | Each check is debited from the key's balance. No crypto involved. |
| Wallet (x402) | X402_PRIVATE_KEY=0x… | The server pays $0.01 in USDC on Base per check, automatically, over x402. |
If both are set, the prepaid key wins — its balance is already paid for, and an on-chain payment would be a second charge.
{
"mcpServers": {
"walletbureau": {
"command": "npx",
"args": ["-y", "@walletbureau/mcp"],
"env": { "WALLETBUREAU_API_KEY": "atk_your_key_here" }
}
}
}
X402_PRIVATE_KEY is a real spending key. Treat it like one:
X402_MAX_PRICE_USD (default 0.10) caps what a single call may cost. The price is quoted by
the remote server, so this check lives in code next to the signing step — not in a prompt.check_counterparty — paidInput: { "address": "0x…" } — a wallet address on Base.
Returns the full report: score, verdict, risk flags with reasons, and the aggregate statistics
behind them. Its price is visible to your client before the call, both in the tool description and
in the tool's _meta under walletbureau/pricing.
{
"address": "0x…",
"score": 74,
"verdict": "ok",
"flags": [
{ "code": "activity_spike", "severity": "low",
"reason": "Volume over the last 24 h is 12× the median of the last 30 days" }
],
"stats": {
"first_seen": "2025-11-02T…Z", "tx_in": 1204, "tx_out": 17,
"volume_in_usd": "604.31", "volume_out_usd": "12.05",
"distinct_payers": 311, "confidence_basis": "confirmed+probable"
},
"meta": { "computed_at": "…", "cache_age_seconds": 312, "api_version": "v1", "disclaimer": "…" }
}
The response schema is a stable contract: fields are only ever added, and a rename or removal means a new API version. Published as JSON Schema alongside the API.
get_service_stats — freeNo input. Public counters of the index: addresses indexed, transfers ingested, scores served.
| Variable | Default | Meaning |
|---|---|---|
API_BASE_URL | https://walletbureau.com | Where the service lives. Change it only to point at your own deployment. |
WALLETBUREAU_API_KEY | — | Prepaid API key, atk_…. |
X402_PRIVATE_KEY | — | Private key that pays per call over x402. |
X402_MAX_PRICE_USD | 0.10 | Hard cap on the price of a single paid call. |
REQUEST_TIMEOUT_MS | 5000 | Timeout for an unpaid request to the service. |
PAYMENT_TIMEOUT_MS | 60000 | Budget for a paid call, including signing and on-chain settlement. |
The server logs to stderr only — stdout belongs to the MCP protocol.
No scoring logic and no data of its own: it is a thin wrapper over the public HTTP API, so a fix to the methodology reaches you without a package upgrade. No local cache either — the service caches, and a second copy would only drift from it.
Apache-2.0
FAQs
MCP server for WalletBureau: check the behavioral risk score of a Base wallet before paying it. Pay per call with x402 or a prepaid API key.
The npm package @walletbureau/mcp receives a total of 37 weekly downloads. As such, @walletbureau/mcp popularity was classified as not popular.
We found that @walletbureau/mcp demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.

Security News
It has been one year since Shai-Hulud made its first appearance on npm.

Research
/Security News
Operators behind PolinRider used a compromised GitHub account to plant malware in four development versions of a Packagist package with 700,000+ downloads.

Security News
GitHub Actions now supports cache-mode, a least-privilege control on the Actions cache aimed at the cache poisoning technique behind recent compromises.