verdix
OfficialVerdix lets an AI agent screen EVM addresses on Base before sending funds or interacting, using paid x402 risk checks plus free pricing/wallet info.
Check an address with
check_address_risk(address, tier), where tier is quick ($0.02), standard ($0.10 default), or deep ($0.50), returning verdict (safe/caution/danger), risk score, reasons, checks, price, and timestamp.Use pinned tools
check_address_risk_quick,check_address_risk_standard, andcheck_address_risk_deepwhen the client should pay exactly the named tier.Use
check_address_risk_lite($0.01) for a cheapest limited screen; it never returnssafe, onlyno_known_risk,caution, ordanger, and reports limited checks.Risk checks cover OFAC sanctions, scam/phishing/exploit lists, address-poisoning lookalikes, burn addresses, and contract/deployer/provenance checks, with address-age or deeper on-chain behavior depending on tier.
Paid calls use USDC on Base via x402 from the configured wallet, enforce
VERDIX_MAX_PRICE_USDbefore signing, and are not charged on a 503 incomplete answer.Call
get_pricingfree to see current tier prices, payment recipient, configured max price, and whether a wallet is configured with its public address for funding.
Supports address risk screening and address-poisoning lookups on Ethereum mainnet through the lite and free poisoning tools. Ethereum data is daily rather than live, and paid lite checks are still settled in USDC on Base.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@verdixcheck 0x4c3f…9e21 before I send it 50 USDC"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
verdix-mcp: check an address before your agent sends it money
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:
OFAC sanctions
scam, phishing and exploit lists
address-poisoning lookalikes, built from a live watch of every token transfer on Base
contract age, code and provenance
burn addresses
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 |
| Verdix's verdict JSON, returned unchanged | quick $0.02 · standard $0.10 (default) · deep $0.50 |
| Same, pinned to the quick tier | $0.02 |
| Same, pinned to the standard tier | $0.10 |
| Same, pinned to the deep tier | $0.50 |
| Cheapest check; never answers | $0.01 |
| Has Verdix's poisoning watcher flagged this address? Base (live) or Ethereum (daily). Not a safety verdict | free |
| Current prices (lite in its own | 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.
Lite ($0.01, never "safe")
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.
Ethereum (lite and free lookup, daily, not live)
Since 0.4.0, check_address_risk_lite and check_address_poisoning take an
optional chain: base (the default, unchanged) or ethereum (Ethereum
mainnet). Every other tool stays Base only.
Lite on Ethereum ($0.01, still paid in USDC on Base) checks OFAC sanctions, scam and phishing lists, burn addresses and address-poisoning lookalikes. Phishing-token and deployer checks are Base only, and there is no quick/standard/deep for Ethereum.
The Ethereum poisoning data comes from a daily scan, not live. Every Ethereum answer carries
data_through(the last complete UTC day) andcoverage: "daily, not live". A lookalike planted afterdata_throughisn't seen yet. If the data is out of date, Verdix answers 503 and you aren't charged.check_address_poisoningis free (no wallet, nothing signed) and callsGET /check/api. It answers onlyflagged,first_seenandkind(plusdata_through/coverageon Ethereum).flagged: falseis not a safety verdict: it covers address poisoning only. It's rate-limited per IP (30 per minute, 500 per day).
{"flagged": false, "first_seen": null, "kind": null, "data_through": "2026-10-30", "coverage": "daily, not live"}What you need
Node.js 18 or newer (it runs through
npx, so there's nothing to install).A Base wallet holding a little USDC. You don't need ETH for gas: x402 payments are signed by you and settled on-chain by the payment facilitator. Use a dedicated wallet with a small balance (a few dollars) for your agent, not your main wallet.
Related MCP server: SENTINEL
Safety
Your key stays on your machine. It is read from this server's environment and used only to sign each payment locally. It is never sent to Verdix or anywhere else, and never logged.
Price cap.
VERDIX_MAX_PRICE_USD(default0.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 to0.50.Only USDC on Base mainnet. Any other asset or network is refused.
You pay only for complete answers. If Verdix can't complete a check (a data source is down), it answers 503 and the payment is not settled.
Setup
Replace 0xYOUR_PRIVATE_KEY with the key of your dedicated Base wallet.
Claude Desktop: one-click extension
Download
verdix-mcp-<version>.mcpbfrom the latest release.In Claude Desktop, open Settings → Extensions and drag the file in.
Click Install, then enter your wallet key and price cap.
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.
Claude Desktop: config file
Open Settings → Developer → Edit Config, which opens claude_desktop_config.json:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
Add:
{
"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.
Cursor
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 Code
claude mcp add verdix -e VERDIX_PRIVATE_KEY=0xYOUR_PRIVATE_KEY -e VERDIX_MAX_PRICE_USD=0.10 -- npx -y verdix-mcpAgent frameworks
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"},
)Environment variables
Variable | Required | Default | Meaning |
| for the paid check tools (not | none | Your Base wallet's private key (hex). |
| no |
| Most one call may cost, in USD |
| no |
| Only for testing against another deployment |
What an answer looks like
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 ofsafe): 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.
Troubleshooting
"No wallet configured":
VERDIX_PRIVATE_KEYisn't set in this server'senvblock."Refusing to pay: … above your cap": raise
VERDIX_MAX_PRICE_USD, or use a cheaper tier (lite is $0.01)."Verdix did not accept the payment": the wallet probably has too little USDC on Base. Call
get_pricingto see the wallet address to fund.Answer with HTTP 503: a data source was down. You weren't charged; retry later.
License
MIT
Available Tools
7 toolscheck_address_poisoningFree address-poisoning lookup (Base or Ethereum)ARead-onlyIdempotent
Free (no wallet, nothing paid): look up whether Verdix's address-poisoning watcher has flagged an EVM address as a lookalike or poisoning bait, on Base (default, live) or Ethereum mainnet (chain "ethereum": a DAILY scan, not live). Returns Verdix's JSON unchanged: flagged (true/false), first_seen, kind; on Ethereum also data_through (the last complete UTC day; lookalikes planted after it are not seen yet) and coverage "daily, not live". flagged=true means do not send funds there. flagged=false is NOT a safety verdict: this checks address poisoning only (no sanctions, scam lists or other checks) - use check_address_risk_lite or check_address_risk_quick for a pre-send screen. Rate-limited per IP (30 per minute, 500 per day). A mixed-case address must have a valid checksum.
| Name | Required | Description | Default |
|---|---|---|---|
| chain | No | base (default, live data) or ethereum (daily scan, not live; answer has data_through) | base |
| address | Yes | The EVM address to look up (the recipient you are about to send to) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover read-only/open-world/idempotent, and the description adds substantial context beyond that: no wallet or payment required, per-IP rate limits of 30/min and 500/day, unchanged JSON passthrough, and the crucial staleness semantics of Ethereum data_through. It also discloses scope limits (poisoning only, no sanctions or scam lists), which is exactly the behavioral framing an agent needs before trusting a false negative.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the highest-value qualifier ('Free (no wallet, nothing paid)') and organized as purpose, return shape, interpretation, alternatives, limits. It is a dense single block with heavy parenthetical nesting, which costs a little scannability, but no sentence is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, yet the description names the returned fields (flagged, first_seen, kind, data_through, coverage) and explains how to interpret each, including the false-negative trap. For a two-parameter read tool this leaves nothing an agent needs missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description still adds value by contrasting 'base (default, live)' against 'ethereum (daily scan, not live)' and by imposing a checksum requirement for mixed-case addresses that the schema pattern alone does not convey. It stops short of adding format examples or guidance on when to prefer one chain.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: look up whether the address-poisoning watcher has flagged an EVM address as a lookalike or poisoning bait, with named chain scope. It explicitly separates itself from the sibling risk tools, so an agent can route correctly without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use (pre-send check of the recipient) and when-not-to-use ('flagged=false is NOT a safety verdict'), naming the alternatives check_address_risk_lite and check_address_risk_quick for a full pre-send screen. The Ethereum caveat ('a DAILY scan, not live') is a usage condition, not just a fact.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_address_riskCheck an address before sending it fundsA
Screen an EVM address on Base before sending it money or interacting with it. Returns Verdix's verdict JSON unchanged: verdict (safe | caution | danger), risk_score (0-100), reasons, checked, tier, price_usd, as_of. 'danger' means sanctioned, a known scam/exploit/phishing address, an address-poisoning lookalike, a burn address or similar - do not send funds. 'caution' means not enough evidence to call it safe (new, unverified, or a data source was unavailable) - confirm with the user first. Every tier runs OFAC sanctions, scam/phishing/exploit lists, address-poisoning lookalikes, burn-address and contract/deployer checks; quick adds a fast address-age read, standard and deep run deeper on-chain behaviour analysis instead (deep runs the same checks as standard today - pick it for high-value or first-time transfers, not for extra checks). PAID: each call costs USDC on Base via x402, paid from the wallet configured in this server (VERDIX_PRIVATE_KEY), never more than VERDIX_MAX_PRICE_USD. Tiers: quick ($0.02), standard ($0.10, default), deep ($0.50); call get_pricing for current prices. A 503 answer (data unavailable) is not charged.
| Name | Required | Description | Default |
|---|---|---|---|
| tier | No | Analysis depth and price: quick ($0.02, fast address-age read), standard ($0.10, deeper on-chain behaviour analysis, recommended default), deep ($0.50, same checks as standard, for high-value or first-time transfers) | standard |
| address | Yes | The EVM address to check (the recipient, contract or counterparty) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses far beyond the annotations: the paid x402/USDC-on-Base model, the wallet and cap used for payment (VERDIX_PRIVATE_KEY, VERDIX_MAX_PRICE_USD), per-tier prices, the default tier, and that a 503 data-unavailable answer is not charged. This covers cost, side effects, and failure semantics that annotations alone (readOnlyHint=false, openWorldHint=true, idempotentHint=false) do not explain.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core action and the verdict semantics before the pricing detail, and every clause carries information (verdict meanings, tier behavior, payment mechanics, 503 handling). It is dense and long, but not padded with filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description enumerates the returned fields (verdict, risk_score, reasons, checked, tier, price_usd, as_of) and interprets the two actionable verdicts. Combined with the payment and failure-mode details, an agent has everything needed to call and interpret this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both parameters are already documented, giving a baseline of 3. The description adds genuine meaning on top by clarifying that 'deep' currently runs the same checks as 'standard' and is a choice about transfer value rather than extra coverage, which the schema's tier description only partially conveys.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (screen), resource (EVM address on Base), and the decision context (before sending funds or interacting). It also implicitly distinguishes itself from the sibling tier-specific tools by explaining that the tier parameter selects quick/standard/deep within this one call.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use guidance: call before sending funds, treat 'danger' as do-not-send, treat 'caution' as confirm-with-user, and pick 'deep' for high-value or first-time transfers rather than for extra checks. It also routes to get_pricing for current prices, naming the alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_address_risk_deepCheck an address before sending it funds (deep tier, $0.50)A
Screen an EVM address on Base before sending it money or interacting with it, pinned to the deep tier (fixed $0.50; use check_address_risk with tier="deep" if you want that price without a dedicated tool). Returns Verdix's verdict JSON unchanged: verdict (safe | caution | danger), risk_score (0-100), reasons, checked, tier, price_usd, as_of. 'danger' means sanctioned, a known scam/exploit/phishing address, an address-poisoning lookalike, a burn address or similar - do not send funds. 'caution' means not enough evidence to call it safe (new, unverified, or a data source was unavailable) - confirm with the user first. Every tier runs OFAC sanctions, scam/phishing/exploit lists, address-poisoning lookalikes, burn-address and contract/deployer checks; this tier additionally runs the same checks as standard today - pick it for high-value or first-time transfers, not for extra checks. PAID: calling this tool always costs $0.50 USDC on Base via x402, paid from the wallet configured in this server (VERDIX_PRIVATE_KEY), and is refused up front if that is above VERDIX_MAX_PRICE_USD. A 503 answer (data unavailable) is not charged.
| Name | Required | Description | Default |
|---|---|---|---|
| address | Yes | The EVM address to check (the recipient, contract or counterparty) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations by disclosing the full cost model: always $0.50 USDC on Base via x402, paid from VERDIX_PRIVATE_KEY, refused up front if above VERDIX_MAX_PRICE_USD, and 503 responses are not charged. It also decodes the 'danger'/'caution' verdicts into actionable conditions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the action, tier and price, and the return-shape summary is dense but useful. The clause 'this tier additionally runs the same checks as standard today' is mildly confusing and could be tightened, costing a point.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description fully documents the return payload (verdict, risk_score, reasons, checked, tier, price_usd, as_of) and its interpretation. Combined with the payment and tier semantics, an agent has everything needed to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single 'address' parameter, so the schema already carries the semantics. The description adds no format or syntax detail beyond what the schema provides, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('screen') and resource ('an EVM address on Base'), and pins itself to a distinct tier. It explicitly tells the agent that check_address_risk with tier="deep" is the equivalent, so the sibling relationship is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use guidance ('pick it for high-value or first-time transfers, not for extra checks') and names the alternative that avoids the dedicated tool. Both the selecting condition and the exclusion are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_address_risk_liteCheapest pre-send address check (lite, $0.01, never "safe")A
Cheapest Verdix check ($0.01): screen an EVM address on Base before sending it USDC or other funds, when the recipient is unknown or new to you. It checks OFAC sanctions, scam/phishing lists, address-poisoning lookalikes, burn addresses, phishing tokens and flagged contract deployers; it skips address age and the caution-only contract checks. Returns Verdix's JSON unchanged: verdict (no_known_risk | caution | danger), risk_score, reasons, checked, limited_checks (always true), checks_performed, not_checked, full_check, as_of. This tool NEVER returns "safe": the clean answer is "no_known_risk", which only means the address is on none of these lists - it is not a safety verdict. 'danger' means do not send funds. 'caution' means confirm with the user first. If you need a "safe" verdict (e.g. before a large or irreversible transfer), call check_address_risk_quick ($0.02) instead or after this one. Optional chain: "base" (default, live data) or "ethereum" (Ethereum mainnet: OFAC, scam/phishing lists, burn addresses and address-poisoning lookalikes from a DAILY scan, not live; the answer adds data_through, the last complete UTC day, and coverage "daily, not live"; phishing-token and deployer checks are Base only, and there is no quick tier for Ethereum). PAID: calling this tool always costs $0.01 USDC on Base via x402 (also for chain=ethereum), paid from the wallet configured in this server (VERDIX_PRIVATE_KEY), and is refused up front if that is above VERDIX_MAX_PRICE_USD. A 503 answer (data unavailable, or Ethereum data out of date) is not charged.
| Name | Required | Description | Default |
|---|---|---|---|
| chain | No | base (default, live data) or ethereum (Ethereum mainnet, daily scan: the answer has data_through and coverage "daily, not live"). Still paid $0.01 in USDC on Base. | base |
| address | Yes | The EVM address to check (the recipient, contract or counterparty) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well past the annotations by disclosing that every call costs $0.01 USDC via x402 from VERDIX_PRIVATE_KEY, that calls above VERDIX_MAX_PRICE_USD are refused up front, that 503 responses are not charged, and that the tool never returns 'safe'. It also spells out the semantic meaning of each verdict (danger = do not send, caution = confirm first), which is exactly the kind of context annotations cannot carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, cost, and scope in the first sentence, and the verdict-SLA caveat lands before the alternative-tool routing. The chain paragraph is dense and slightly overstuffed, but each clause carries operational meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a paid, non-idempotent, open-world tool with no output schema, the description enumerates every returned field, the payment and refusal behavior, the non-charged failure case, and the per-chain coverage differences. An agent has everything needed to decide and call correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description earns above that by explaining that chain=ethereum is a daily rather than live scan, returns data_through and coverage, lacks phishing-token and deployer checks, and still bills in USDC on Base. It adds real consequences to the enum choice rather than restating it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('screen an EVM address on Base') plus the exact risk categories checked and skipped, which distinguishes it from check_address_risk_deep/standard and is reinforced by the explicit sibling reference to check_address_risk_quick.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger ('before sending it USDC or other funds, when the recipient is unknown or new to you') and names the alternative ('If you need a "safe" verdict ... call check_address_risk_quick ($0.02) instead or after this one'), including the cost tradeoff that selects between them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_address_risk_quickCheck an address before sending it funds (quick tier, $0.02)A
Screen an EVM address on Base before sending it money or interacting with it, pinned to the quick tier (fixed $0.02; use check_address_risk with tier="quick" if you want that price without a dedicated tool). Returns Verdix's verdict JSON unchanged: verdict (safe | caution | danger), risk_score (0-100), reasons, checked, tier, price_usd, as_of. 'danger' means sanctioned, a known scam/exploit/phishing address, an address-poisoning lookalike, a burn address or similar - do not send funds. 'caution' means not enough evidence to call it safe (new, unverified, or a data source was unavailable) - confirm with the user first. Every tier runs OFAC sanctions, scam/phishing/exploit lists, address-poisoning lookalikes, burn-address and contract/deployer checks; this tier additionally runs a fast address-age read. PAID: calling this tool always costs $0.02 USDC on Base via x402, paid from the wallet configured in this server (VERDIX_PRIVATE_KEY), and is refused up front if that is above VERDIX_MAX_PRICE_USD. A 503 answer (data unavailable) is not charged.
| Name | Required | Description | Default |
|---|---|---|---|
| address | Yes | The EVM address to check (the recipient, contract or counterparty) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: discloses that the call is paid ($0.02 USDC via x402 from VERDIX_PRIVATE_KEY), that it is refused up front if above VERDIX_MAX_PRICE_USD, that a 503 is not charged, which checks every tier runs vs. the extra address-age read this tier adds, and the exact meaning of each verdict value. This is unusually rich disclosure for a paid, open-world call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads purpose, tier and price, then verdict semantics, then payment mechanics. Dense but every clause carries information; only the parenthetical about check_address_risk tier="quick" and the payment paragraph overlap slightly in topic, keeping it short of a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description enumerates the returned fields (verdict, risk_score, reasons, checked, tier, price_usd, as_of) and the failure/pricing edge cases, so an agent knows both what it gets back and what it costs before invoking.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 required param whose pattern and meaning are already documented in the schema ('the recipient, contract or counterparty'). The description adds only contextual framing (sending money / interacting) rather than new syntax or semantics, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (screen) and resource (EVM address on Base) plus the exact tier and price, and explicitly distinguishes itself from the sibling check_address_risk with tier="quick". An agent can tell instantly what this does and how it differs from the other three risk tiers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit use case (before sending funds or interacting), an explicit alternative with the condition that selects it (check_address_risk with tier="quick" for the same price without a dedicated tool), and decision rules for the two non-safe verdicts ('do not send funds' for danger, 'confirm with the user first' for caution).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_address_risk_standardCheck an address before sending it funds (standard tier, $0.10)A
Screen an EVM address on Base before sending it money or interacting with it, pinned to the standard tier (fixed $0.10; use check_address_risk with tier="standard" if you want that price without a dedicated tool). Returns Verdix's verdict JSON unchanged: verdict (safe | caution | danger), risk_score (0-100), reasons, checked, tier, price_usd, as_of. 'danger' means sanctioned, a known scam/exploit/phishing address, an address-poisoning lookalike, a burn address or similar - do not send funds. 'caution' means not enough evidence to call it safe (new, unverified, or a data source was unavailable) - confirm with the user first. Every tier runs OFAC sanctions, scam/phishing/exploit lists, address-poisoning lookalikes, burn-address and contract/deployer checks; this tier additionally runs deeper on-chain behaviour analysis. PAID: calling this tool always costs $0.10 USDC on Base via x402, paid from the wallet configured in this server (VERDIX_PRIVATE_KEY), and is refused up front if that is above VERDIX_MAX_PRICE_USD. A 503 answer (data unavailable) is not charged.
| Name | Required | Description | Default |
|---|---|---|---|
| address | Yes | The EVM address to check (the recipient, contract or counterparty) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: discloses the x402 USDC-on-Base payment, the funding wallet, the max-price refusal, and the notable edge case that a 503 is not charged. It also decodes the verdict semantics ('danger' = sanctioned/scam/poisoning/burn, 'caution' = insufficient evidence, confirm with user).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads purpose, then pricing, then verdict semantics, then payment mechanics — a logical order with no filler. It is dense and long-ish, but every clause carries operational information, so it stays just short of 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description compensates by enumerating the returned verdict JSON fields (verdict, risk_score, reasons, checked, tier, price_usd, as_of). Combined with the pricing and failure-mode details, an agent has everything needed to call and interpret it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Single required parameter with 100% schema description coverage, so the schema already documents the address and its pattern. The description reinforces that the address is the recipient/contract/counterparty, but adds no format or validation detail beyond the schema — baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Screen an EVM address on Base') and pins the scope to the standard tier at a fixed $0.10, which cleanly separates it from the sibling check_address_risk_quick/deep and the generic check_address_risk. An agent can select it without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger ('before sending it money or interacting with it') and names the alternative route ('use check_address_risk with tier="standard" if you want that price without a dedicated tool'). It also states a refusal precondition (price above VERDIX_MAX_PRICE_USD).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pricingVerdix prices per tierARead-only
Free. Current Verdix price per tier (USDC on Base, via x402), the payment recipient, your configured max price per call, and whether a wallet is configured (with its public address, so it can be funded). tiers lists quick/standard/deep; the lite tier ($0.01, check_address_risk_lite, never answers safe) is in the separate lite field. Nothing is signed or paid.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered; the description goes further by stating the tool is free, that 'nothing is signed or paid', and that the wallet address is exposed so it can be funded. These are real behavioral facts beyond the annotations, though it stops short of describing any freshness 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences, front-loaded with the 'Free' cost signal, then output contents, then the tiers/lite split. Every sentence carries information, though the output-field enumeration runs long and could be tightened slightly. No filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description must explain return values, and it does: currency and chain (USDC on Base via x402), the tiers field contents (quick/standard/deep), the separate lite field, payment recipient, max price, and wallet configuration. For a zero-parameter, no-output-schema tool this is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, which is the baseline-4 case; there are no arguments whose semantics could be missing. The description instead spends its words documenting returned fields, which is useful but not parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description makes clear this is a read-only pricing/configuration lookup for the Verdix service, enumerating exactly what is returned (per-tier prices, payment recipient, configured max price, wallet status). It also distinguishes itself from the check_address_risk_* siblings by explaining that the lite tier belongs to check_address_risk_lite. It never states a clean verb+resource ('returns pricing/config'), but the resource and scope are unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use guidance such as 'call this first to discover prices or verify your wallet/max price before invoking a paid check.' The reference to check_address_risk_lite and the lite tier is routing context for interpreting a field, not usage direction. An agent must infer the invocation context on its own.
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.
2 tool updates
v0.4.0- Added
check_address_poisoning - Changed
check_address_risk_lite1 field changed- added
Input schema / properties / chainAdded value: +{ + "default": "base", + "description": "base (default, live data) or ethereum (Ethereum mainnet, daily scan: the answer has data_through and coverage \"daily, not live\"). Still paid $0.01 in USDC on Base.", + "enum": [ + "base", + "ethereum" + ], + "type": "string" +}
1 tool update
v0.3.1- Added
check_address_risk_lite
4 tool updates
- Changed
check_address_risk1 field changed- changed
Input schema / properties / tier / descriptionPrevious value: -"Analysis depth and price: quick ($0.02), standard ($0.10), deep ($0.50)"New value: +"Analysis depth and price: quick ($0.02, fast address-age read), standard ($0.10, deeper on-chain behaviour analysis, recommended default), deep ($0.50, same checks as standard, for high-value or first-time transfers)"
- Added
check_address_risk_deep - Added
check_address_risk_quick - Added
check_address_risk_standard
2 tool updates
v0.1.1- First observed
check_address_risk - First observed
get_pricing
TDQS
Scored across 7 tools
Four tools (check_address_risk, check_address_risk_quick, check_address_risk_standard, check_address_risk_deep) all perform the same pre-send address screen on Base and differ only by price tier, while the generic tool can already select a tier. The descriptions explicitly address this redundancy and explain when to use each, which prevents the set from being genuinely confusing, but the boundaries are still overlapping by design.
All risk-screening tools follow a consistent snake_case check_address_risk[_tier] pattern, and check_address_poisoning fits the same verb_noun convention. get_pricing is the only different verb, which is appropriate for its free utility role.
Seven tools is a reasonable size for a focused address-risk API and keeps the surface manageable. However, the three tier-pinned wrappers largely duplicate the generic check_address_risk tool, so the set is slightly larger than strictly necessary.
The surface covers the core lifecycle: free poisoning lookup, lite/quick/standard/deep screening, a flexible tiered tool, and pricing/wallet status. Minor gaps remain, such as batch screening or explicit supported-chain discovery, but the main pre-send workflows are covered.
Maintenance
Related MCP Connectors
Smart-contract risk reports for AI agents on 20 EVM chains, paid per call via x402 ($0.02 USDC).
Solana address risk grades and token scans for AI agents. Pay-per-call via x402 (USDC on Base).
Pre-trade token safety checks for AI agents on Solana and Base. x402 USDC per call, no key.
Check a Base contract, transaction or web page before you act. Free pricing, paid per call in USDC.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenancePay-per-use AI security and research tools for autonomous agents on Base, enabling honeypot detection, risk assessment, wallet analysis, and yield optimization via the x402 protocol.1-
- FlicenseAqualityCmaintenanceAgent-Level Transaction Safety Oracle. Before an AI agent signs a blockchain transaction, it returns a SAFE/UNSAFE verdict with a SENTINEL Score (AAA-D) and risk flags. Pay-per-call $0.005 USDC via x402 on Base.1-
- FlicenseNot gradedqualityFmaintenanceProvides counterparty risk checks for any EVM address, returning malicious-history flags, tiered risk scoring, and plain-language summaries via x402 payment.-
- FlicenseNot gradedqualityDmaintenanceAI-synthesized 3-bullet DeFi risk dossier for any Base wallet. Pre-trade counterparty vetting for MEV and arbitrage bots via x402 ($0.10 USDC per query).-