Check an EVM address on Base before sending funds: safe/caution/danger. Pays per call via x402.
Runs on your machine from its package; the steps are below.
At most: only reads or looks up information.
Odel charges nothing per call. The publisher may charge for its own service.
Runs locally over stdio
This server isn't hosted — your MCP client launches it from a package registry. Use one of the commands below, or drop the config into your client (e.g. Claude Desktop).
Run
npx -y verdix-mcp
MCP client config
{
"mcpServers": {
"verdix-address-risk": {
"command": "npx",
"args": [
"-y",
"verdix-mcp"
]
}
}
}An MCP server that lets your AI agent check an EVM address on Base before sending it funds or approving a contract. It calls Verdix, which answers safe, caution or danger with the reasons. It checks:
Each check is paid per call in USDC on Base via x402, from your own wallet. There is no account, no API key and no subscription. Your key never leaves your machine, and a price cap is enforced before anything is signed.
"Send 50 USDC to 0x4c3f…9e21": the agent calls
check_address_riskfirst, gets"verdict": "danger", "reasons": ["address_poisoning"], and stops to ask you.
| Tool | What it does | Cost |
|---|---|---|
check_address_risk(address, tier) | Verdix's verdict JSON, returned unchanged | quick $0.02 · standard $0.10 (default) · deep $0.50 |
check_address_risk_quick(address) | Same, pinned to the quick tier | $0.02 |
check_address_risk_standard(address) | Same, pinned to the standard tier | $0.10 |
check_address_risk_deep(address) | Same, pinned to the deep tier | $0.50 |
check_address_risk_lite(address) | Cheapest check; never answers safe (see Lite) | $0.01 |
get_pricing() | Current prices (lite in its own lite field), your price cap, and your wallet's public address | free |
check_address_risk takes a tier argument, but an agent framework whose x402
client always pays the first price it's offered will end up paying quick
regardless of what tier it asked for. The three check_address_risk_<tier>
tools avoid that: each calls Verdix's single-tier endpoint
(/risk/address/<tier>), which offers exactly one price, so any x402 client
pays the tier the tool name says. Use whichever is simpler for your client;
both reach the same risk checks.
check_address_risk_lite is the cheapest check, meant for a quick screen
before sending USDC to an address you don't know. It calls
/risk/address/lite, which checks OFAC sanctions, scam and phishing lists,
address-poisoning lookalikes, burn addresses, phishing tokens and flagged
contract deployers. It skips address age and the caution-only contract checks.
Its verdict is no_known_risk, caution or danger, never safe.
no_known_risk only means the address is on none of those lists. It is not a
safety verdict. If you need safe (say, before a large transfer), use
check_address_risk_quick ($0.02). The answer also carries limited_checks: true, checks_performed, not_checked and full_check. get_pricing lists
quick/standard/deep in tiers, as before, and lite's price in a separate
lite field.
npx, so there's nothing to install).VERDIX_MAX_PRICE_USD (default 0.10, enough for lite, quick and standard) is the most one call may
cost. A call above it is refused before anything is signed. To allow the
deep tier, set it to 0.50.Replace 0xYOUR_PRIVATE_KEY with the key of your dedicated Base wallet.
verdix-mcp-<version>.mcpb from the
latest release.The key is stored in your OS keychain. Node.js doesn't need to be installed, because Claude Desktop runs the extension with its own Node.js.
Open Settings → Developer → Edit Config, which opens claude_desktop_config.json:
~/Library/Application Support/Claude/claude_desktop_config.json%APPDATA%\Claude\claude_desktop_config.jsonAdd:
{
"mcpServers": {
"verdix": {
"command": "npx",
"args": ["-y", "verdix-mcp"],
"env": {
"VERDIX_PRIVATE_KEY": "0xYOUR_PRIVATE_KEY",
"VERDIX_MAX_PRICE_USD": "0.10"
}
}
}
}
Then restart Claude Desktop.
Put the same block in ~/.cursor/mcp.json (all projects) or .cursor/mcp.json
(one project):
{
"mcpServers": {
"verdix": {
"command": "npx",
"args": ["-y", "verdix-mcp"],
"env": {
"VERDIX_PRIVATE_KEY": "0xYOUR_PRIVATE_KEY",
"VERDIX_MAX_PRICE_USD": "0.10"
}
}
}
}
Don't commit a project-level .cursor/mcp.json that contains your key.
claude mcp add verdix -e VERDIX_PRIVATE_KEY=0xYOUR_PRIVATE_KEY -e VERDIX_MAX_PRICE_USD=0.10 -- npx -y verdix-mcp
Any MCP client that can launch a stdio server works. The command is
npx -y verdix-mcp, with the environment variables below. Python example with the
official MCP SDK:
from mcp import StdioServerParameters
verdix = StdioServerParameters(
command="npx",
args=["-y", "verdix-mcp"],
env={"VERDIX_PRIVATE_KEY": os.environ["AGENT_WALLET_KEY"], "VERDIX_MAX_PRICE_USD": "0.10"},
)
| Variable | Required | Default | Meaning |
|---|---|---|---|
VERDIX_PRIVATE_KEY | for the paid check tools | none | Your Base wallet's private key (hex). EVM_PRIVATE_KEY is accepted too |
VERDIX_MAX_PRICE_USD | no | 0.10 | Most one call may cost, in USD |
VERDIX_API_URL | no | https://api.verdixapi.com | Only for testing against another deployment |
check_address_risk returns Verdix's JSON exactly as the API sent it:
{
"address": "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913",
"chain": "base",
"tier": "quick",
"price_usd": 0.02,
"risk_score": 5,
"verdict": "safe",
"reasons": [],
"checked": ["ofac", "scam_lists", "poisoning_watch", "onchain_age", "contract_code", "burn_list", "provenance"],
"as_of": "2026-09-26T13:15:10.524501+00:00"
}
danger: sanctioned, a known scam, exploit or phishing address, an
address-poisoning lookalike, a burn address and similar. Don't send funds.caution: not enough evidence to call it safe. For example, it's new, an
unverified contract, or one of the data sources was unavailable. Ask the user
before sending.safe: every check ran and found nothing.no_known_risk (lite only, instead of safe): none of lite's lists know
the address. Not a safety verdict; use quick if you need one.The payment receipt (payer, on-chain transaction) is in the tool result's _meta
under com.verdixapi/payment.
VERDIX_PRIVATE_KEY isn't set in this server's env block.VERDIX_MAX_PRICE_USD, or use a cheaper tier
(lite is $0.01).get_pricing to see the wallet address to fund.MIT