Limitguard
Provides wallet trust score verification for Solana addresses, enabling crypto payment risk checks.
Limitguard MCP Server
Check Dutch and Belgian companies, sales leads and crypto wallets before you deal with them, over the Model Context Protocol: the KVK (Netherlands) and KBO (Belgium) registers, EU VAT (VIES), the OFAC, EU and UN sanctions lists and wallet risk on Base and Solana, with the source and date of every answer.
Server URL: https://api.limitguard.ai/mcp
Transport: Streamable HTTP (POST)
Auth: API key (Bearer), plus an x402 micropayment per call on the free and sandbox tiers
What it is: Limitguard is a lead validation service for lead generation agencies, B2B marketing and sales teams: it checks the company behind each lead against official business registers (full coverage in the Netherlands and Belgium), EU VAT and sanctions lists, with website age in the company check, and returns proceed, review or block with the source on every line. Developers and AI agents can use its HTTP API, MCP server and A2A service, hosted in the EU.
Start here: On MCP a paid tool takes an x402 payment per call, or debits prepaid credit (a paid key, or a funded workspace); wallet_sanctions_preview, sanctions_preview and get_trust_score are free; the free sandbox key returns mock data on the REST API only, not on MCP. Paid by x402: Lead Verify $0.10 per lead and agent check $0.005 per wallet; entity check and KYB $0.29 and risk score $0.25 fresh, $0.11 cached ($0.25 KYB) when available; report $0.55; sanctions and wallet screens $0.005; other routes at the account price. API keys, the dashboard and the Claude connector pay the account prices: Lead Verify $0.27 per lead and agent check $0.75 per wallet; $0.11-1.85 per call; entity and risk checks $0.88-1.05 fresh ($1.50 KYB), $0.11 cached ($0.25 KYB) when available.
Features
Lead verify for Dutch and Belgian sales leads: is it a real, active company? A verdict, a 0-100 lead score and one action per flag ($0.27 with an API key, $0.10 with x402).
Company check against the KVK and KBO registers, EU VAT (VIES), the domain and the IBAN, with a 0-100 score and a recommendation.
Sanctions screen of company and person names against the OFAC, EU and UN lists, with a free yes/no preview.
Crypto wallet screen on Base and Solana: OFAC address match, balances, wallet age, recent activity and risk rules with advice ($0.11 with an API key, $0.005 with x402).
Free wallet sanctions check: a yes/no against the OFAC list.
AI agent wallet check before your agent pays: sanctions, balance, ERC-8004 identity and public reputation ($0.75 with an API key, $0.005 with x402).
Pay per call in USDC on Base or Solana with x402, or with an API key and prepaid credit. A check that fails is not charged.
MCP, REST and A2A, and agents can pay inside A2A with x402.
Sources on every answer, with the date each one was read. Hosted in the EU.
Related MCP server: eu-verify
Tools
tools/list is public: connect and read it without any credential. These are
the names it returns, and the names tools/call accepts:
Tool | Description | Inputs |
| Company check on a business: sanctions screening and country risk, the Dutch KVK register for an NL company, and the website domain when you send it. Returns trust_score (0-100, 100 = best), trust_level (high means low risk), cluster, recommendation, confidence, top_factors and sources_checked. |
|
| Look up your own most recent trust score for an entity you checked before, from your stored checks: score, level, when, which product, trend and how many checks are on record. Runs no new check and calls no data source. Free ($0). |
|
| Screen a wallet: OFAC SDN address match, on-chain signals (contract check, native and USDC balance, transaction count, first seen on Base) and named risk rules with up to 3 advice items. On Base, also reports any ERC-8004 agent the wallet owns and its open on-chain reputation as descriptive signals, never scored. $0.11. Supports EVM and Solana addresses. |
|
| Quick risk score from sanctions screening and country risk only, without the register or domain lookups of check_entity. Returns risk_score (0-100, 100 = riskiest), risk_level (high means high risk, the reverse of check_entity's trust_level), sanctions_match and fatf_status; no recommendation or factors. |
|
| Per-entity report built from one real check: registry identity, sanctions and PEP screens, domain signals, risk score with the rules that fired, correlations, every finding as a ranked action, a per-source status table (ok / unavailable / error) and a report hash. |
|
| Free yes/no sanctions preview against the local OFAC SDN, EU and UN lists. Returns possible_match, lists_checked, list_dates and list_note only, never an entry. 10 per caller per UTC day. |
|
| Free yes/no check of a wallet address against the OFAC SDN list: sanctioned, lists, the list date and its freshness, no programmes or entry ids. 10 per caller per UTC day, separate from sanctions_preview. The full wallet screen is verify_wallet ($0.11). |
|
| Sanctions screen against the local OFAC SDN, EU and UN lists: matched entries with list, entry id, programmes, countries, listing date and match score. A name match is not a determination. |
|
| Check a counterparty agent's EVM wallet in one call: OFAC SDN digital-currency address list match, Base USDC and ETH balance, ERC-8004 identity registration (and, given an agent id, that agent's owner and payment wallet) and open ERC-8004 feedback, which is not scored. $0.75. |
|
| Verify a NL/BE sales lead against the registers in one call: real and active, VAT, mail server, IBAN, sanctions; a 0-100 lead score. $0.27. |
|
Pricing
A paid tool call is debited from your API key's prepaid balance at the account price, or paid
per call with an x402 micropayment (USDC on Base or Solana) at the
agent price in Agent prices (x402). The tools with their own
/v1/mcp/* path are priced below at the account price; the other tools are priced at the REST endpoint they call,
in Full x402 API.
Endpoint | Account price |
Entity Check ( | $1.05 |
Risk Score ( | $0.90 |
Check Agent ( | $0.00: hidden placeholder, not in |
Trust Score ( | $0.00, free (your own stored score) |
Verify Wallet ( | $0.11 |
Authentication
Two things gate a tools/call, in this order:
An API key, as
Authorization: Bearer <key>. Without one every call comes backAuthentication required. Provide API key via Authorization: Bearer <lg_live_...> header.Get a free one (no payment, no card):curl -X POST https://api.limitguard.ai/v1/keys/create \ -H "Content-Type: application/json" \ -d '{"email": "you@example.com"}'That returns a
free-tier key, which is the key the Quick Start configs below expect. Asking for"tier": "sandbox"instead returns a key that answers with mock data; see the next point before you use one here.Payment, on the free and sandbox tiers only. Send the x402 proof as
PAYMENT-SIGNATURE(x402 v2) orX-PAYMENT(v1), alongside the Bearer key. A key with a prepaid balance (indie and up) is debited per call instead and needs no per-call payment. API keys have no subscription; see API keys and prepaid balance.A sandbox key does not lift the payment requirement on this transport: it owes x402 per call exactly as a
freekey does, and it answers with mock data rather than a real check. Paying for one over MCP spends real USDC on a mock answer. Where a sandbox key is worth having is the REST mirrors under/v1/mcp/*(sent asX-API-Key, not Bearer), which serve the mock response before the payment check: a way to exercise the request and response shapes, not a cheap source of real checks.
Agent prices (x402)
An x402 payment pays the agent price: REST, A2A with x402, and MCP pay-per-call on /mcp. An API key, the dashboard and the Claude connector pay the account price, from prepaid credit. A route not listed here costs its account price with x402 too.
The official x402 SDKs refuse a payment above one dollar by default (maxAmountPerPayment). That default covers every agent price. Raise it only for the deep-check enhanced and credit tiers and for the /v1/keys/upgrade/* and /v1/keys/topup/* purchases.
Endpoint | Agent price (x402) | Account price |
| $0.29 fresh, $0.11 cached | $1.05 fresh, $0.11 cached |
| $0.29 | $1.05 |
| $0.25 fresh, $0.11 cached | $0.90 fresh, $0.11 cached |
| $0.25 | $0.90 |
| $0.29 fresh, $0.25 cached | $1.50 fresh, $0.25 cached |
| $0.55 | $1.85 |
| $0.10 | $0.27 |
| $0.005 | $0.75 |
| $0.005 | $0.11 |
| $0.005 | $0.11 |
Full x402 API (direct HTTP)
The tools above are what the MCP server exposes over the Model Context Protocol. Clients that
integrate directly over HTTP, instead of through an MCP client, can reach every x402-priced
endpoint on https://api.limitguard.ai: the REST endpoints below, plus the MCP tools' own
/v1/mcp/* paths. All of them are published in
/.well-known/x402.json; /.well-known/mcp.json
lists only the tools above.
Most of the REST endpoints are capabilities the MCP tools do not expose, but two run the same
engine over plain HTTP: /v1/entity/check behind check_entity (the MCP tool takes the entity
name, country, KVK number and domain only, so no IBAN or VAT), and /v1/risk/score behind
get_risk_score, at the same price.
Payment is per call throughout: USDC on Base or Solana, at the agent price in Agent prices (x402). The Price columns below are the account prices an API key pays. The data endpoints below need no API key at all. The /v1/keys/upgrade/* endpoints also take payment without one,
but they act on an API key you already hold; see API keys and prepaid balance.
Lead and company checks
Endpoint | Method | Price | Description |
| POST | $0.27 | Lead verify for one NL or BE sales lead: is it a real, active company? Checks the KVK or KBO register and cross-checks what the lead holds: VAT with VIES, mail server and disposable domain, IBAN country and bank (not the holder), and the company name against the OFAC, EU and UN sanctions lists. Returns a verdict, a 0-100 lead score and flags, each with one action. An input not given is not checked. |
| POST | $0.75 | Agent wallet check in one call: screens an EVM wallet against the OFAC SDN digital-currency address list, reads its Base USDC and ETH balance, looks up its ERC-8004 identity registration (and, given an agent id, that agent's owner and payment wallet) and lists open ERC-8004 feedback, which is not scored. Returns one verdict and each part's status; a part that could not be read says so. |
| POST | $0.11 | Sanctions screen of a company or person name against the OFAC SDN, EU and UN sanctions lists, held locally and refreshed daily. Returns each matched entry: list, entry id, matched name, programmes, countries, listing date and match score. Exact normalised or word-order-insensitive name match only; a name match is not a determination. |
| POST | $1.05 | Full entity trust check across multiple verification layers: KVK/CBE registry, OpenSanctions, country risk (CPI/FATF), domain WHOIS, IBAN validation and EU VAT/VIES. Returns trust score 0-100 with cluster and recommendation. |
| POST | $0.90 | Quick risk score (0-100) for entity name + country. Lightweight check without full data source scan. |
| POST | $0.88 | Extended screening in two tiers. fresh ($0.88): PEP and relative/close-associate matches from OpenSanctions, plus a Dutch insolvency register screen (NL only). enhanced ($1.71): the same plus adverse media screening. If a tier's source cannot be reached the call returns 503 and is not charged. |
| POST | $1.85 | Per-entity report built from one real check's signals: identity, sanctions and PEP screening, domain signals, trust score (risk.trust_score, 0-100, 100 = best), correlations with the caller's earlier reports, sources and an evidence hash. A source that did not answer is shown unavailable, never clean. |
Reputation management
Endpoint | Method | Price | Description |
| POST | $0.90 | Reputation scoring with linear trust decay: after its first week a score loses 2-5 points a week by risk cluster (none for a sanctions-flagged entity), plus a bonus of up to 5 points for repeat verifications. |
| GET | $0.11 | Historical reputation trend data. Returns the trust score timeline with the decay applied at each point and an overall trend. |
Wallet services
Endpoint | Method | Price | Description |
| GET | $0.11 | ERC-8004 agent wallet balance check. Returns the on-chain USDC balance (Base mainnet) for a registered ERC-8004 agent wallet. |
Regulatory compliance
Endpoint | Method | Price | Description |
| POST | $1.50 | Know Your Business verification: company registration, sanctions screening, VAT/VIES, and domain analysis in one call. |
| GET | $0.11 | Daily changes to the OFAC, EU and UN sanctions lists, plus alerts when an entity or wallet this key checked is listed. Poll this route; alerts about entities or wallets this key checked are also sent to a webhook registered for sanctions.match.new (POST /v1/webhooks). Filter by jurisdiction and severity. |
| GET | $0.11 | EU AI Act readiness self-assessment for one AI system. Send the system_type and the checklist items you have completed (completed_items); returns the EU AI Act risk level for that system type, a readiness score and the open gaps. entity_id is your label: nothing is looked up about it. |
MCP tool paths (direct HTTP)
The MCP tools that mirror a REST check are also reachable over plain HTTP at their own
x402-priced /v1/mcp/* paths, with the same capabilities and prices as the Tools table above,
for clients that pay per call without opening an MCP session. The other tools call one of the
REST endpoints above directly.
Endpoint | Method | Price | MCP tool |
| POST | $1.05 |
|
| POST | $0.00 |
|
| POST | $0.00 |
|
| POST | $0.11 |
|
| POST | $0.90 |
|
API keys and prepaid balance
Limitguard accepts two forms of payment: x402 per call, or an API key with a prepaid balance
that each priced call is debited from. API keys and x402 have no subscription (the Limitguard dashboard also has optional monthly plans, paid in euros). Paying per call needs no API key on the data endpoints above or the /v1/keys/upgrade/* paths.
The MCP transport always wants one: it takes Authorization: Bearer on every tools/call, and
its /v1/mcp/* mirrors take X-API-Key.
A base key is free and self-service: POST /v1/keys/create with an email address, no payment and
no existing key needed. It identifies you and tracks your usage; it does not pay for calls. A
free-tier key holds no balance and still owes x402 on every paid endpoint, on REST exactly as on
MCP. The monthly_limit it reports is a ceiling on how many calls it may make, not an allowance of
free ones. A sandbox key is also free and returns mock data, never a real check. Over MCP it owes
x402 like any other free key, so it earns its keep only against the REST mirrors.
The endpoints below take an x402 payment, credit the same amount 1:1 to the prepaid balance of a
key you already hold, and set its tier label. Each priced call is then debited from that balance
at the prices above, with no per-call x402 payment. When the balance is too low for a call, that
call answers 402 with an x402 quote and the top-up path, and POST /v1/keys/topup/{usd}
adds any whole-dollar amount from $5. On every tier monthly_limit is an abuse limit, not an
allowance of included calls.
Endpoint | Method | Price | Tier label |
|
| POST | $29 | Indie | 1,000 calls/mo |
| POST | $99 | Starter | 10,000 calls/mo |
| POST | $299 | Growth | 50,000 calls/mo |
| POST | $999 | Pro | 250,000 calls/mo |
Prices and descriptions above are generated from the service and were last checked against the live x402 manifest on 2026-10-06. The manifest is the source of truth: fetch it if you need the current schema for any endpoint.
Quick Start
Claude (Desktop and claude.ai)
This is a remote server, so it is added as a custom connector, not in
claude_desktop_config.json (that file is for local servers only):
Open Customize > Connectors, then + Add > Add custom connector. On a Team or Enterprise plan an owner adds it under Organization settings > Connectors.
URL:
https://api.limitguard.ai/mcpUnder Request headers, add
Authorizationwith the valueBearer YOUR_LIMITGUARD_KEY.
Cursor
Add to MCP settings:
{
"limitguard": {
"type": "url",
"url": "https://api.limitguard.ai/mcp",
"headers": {
"Authorization": "Bearer YOUR_LIMITGUARD_KEY"
}
}
}Smithery
npx -y @smithery/cli install team-mehs/limitguardAny MCP Client
Connect to https://api.limitguard.ai/mcp using Streamable HTTP transport (POST),
sending Authorization: Bearer <key> on every tools/call.
Run locally (stdio)
For a client that only runs local servers, this repository also ships a stdio server with the same tools. Each tool calls the Limitguard REST API with your key, so a paid call is debited from the key's prepaid balance; paying per call with x402 needs the remote server above.
uvx --from git+https://github.com/jwconsultancyteam/limitguard-mcp limitguard-mcp{
"mcpServers": {
"limitguard": {
"command": "uvx",
"args": ["--from", "git+https://github.com/jwconsultancyteam/limitguard-mcp", "limitguard-mcp"],
"env": { "LIMITGUARD_API_KEY": "YOUR_LIMITGUARD_KEY" }
}
}
}Or in a container: docker build -t limitguard-mcp . then
docker run -i --rm -e LIMITGUARD_API_KEY limitguard-mcp.
Agent skills
Three Agent Skills teach an agent when to call which tool, how to spend the user's balance safely, and how to read each answer. They work with any agent that reads SKILL.md files.
Skill | For |
Dutch and Belgian leads and companies: register, VAT, mail server, IBAN, name sanctions | |
Wallets and counterparty agents: OFAC SDN address list, on-chain risk, ERC-8004 identity | |
Agents without an API key: pay per call with x402 over HTTP or A2A, with a price ceiling |
Claude Code (all three skills plus the MCP server, OAuth sign-in):
/plugin marketplace add jwconsultancyteam/limitguard-mcp /plugin install limitguard@limitguardOther agents:
npx skills add jwconsultancyteam/limitguard-mcp, or copy a folder underskills/into the agent's skills directory. Each folder works on its own.
Each skill's references/tools.md is generated from the served server card; do not edit it by hand.
Discovery Endpoints
Endpoint | URL |
MCP server card | |
MCP Tools | |
x402 Pricing | |
Health |
The service publishes two tool cards, and they do not fully agree. Both list the same
tools, taking the same required arguments, so a tools/call written against either one
works, but the descriptions and the argument wording differ between them. The Tools
table above and this repository's server.json are generated from the server card,
which is the one to read when the two disagree. Reconciling them is the service's to fix.
Use Cases
Lead validation: check the company behind each lead (KVK or KBO register, EU VAT via VIES, sanctions lists and email domain) before it reaches a client, and get a verdict, a 0-100 lead score and flags (
verify_lead).Company checks: developers and AI agents verify a business entity before a deal or a payment (
check_entity,get_risk_score), or build a per-entity report with every source's status (get_compliance_report).Sanctions screening: screen a company or person name against the OFAC, EU and UN lists (
sanctions_preview,sanctions_screen).Agent-to-agent checks: check a counterparty agent's wallet and ERC-8004 identity before working with it (
check_agent_wallet).Wallet screening: screen a wallet address before an on-chain payment (
verify_wallet).
Security
HTTPS with TLS 1.3
x402 payment protocol for per-call billing (no stored payment credentials)
Hosted in the EU (API and dashboard in the EU, database in Ireland); data minimisation
All tools are read-only (no data modification)
Rate limited per payment (abuse-proof)
FAQ
What is Limitguard? Limitguard checks the company, sales lead or crypto wallet behind a deal before you call, sign or pay. It reads official sources (the KVK and KBO business registers, EU VAT through VIES, the OFAC, EU and UN sanctions lists and public blockchain data for wallets) and answers with what it found, where and when.
How is it priced? Per check, with no subscription for API keys or x402. An API key pays the account price: lead verify $0.27, company check $1.05 ($0.11 from cache when available), risk score $0.90, KYB check $1.50, sanctions screen $0.11, wallet screen $0.11, agent wallet check $0.75, company report $1.85. An x402 payment pays the lower agent price: lead verify $0.10, company check $0.29, risk score $0.25, KYB check $0.29, sanctions screen $0.005, wallet screen $0.005, agent wallet check $0.005, company report $0.55 (see Agent prices (x402)). Free: the name sanctions preview, the wallet sanctions check and your own stored trust score. A check that fails is not charged. Live prices: /.well-known/x402.json.
How do I connect it to Claude, Cursor or another MCP client?
Add https://api.limitguard.ai/mcp with your API key in the header Authorization: Bearer lg_live_... (a free key: see Authentication). In Claude you can instead add https://api.limitguard.ai/mcp-oauth as a custom connector and sign in with your Limitguard account; paid checks are then taken from your workspace credit.
Can an AI agent pay without an account? Yes. Over REST or A2A an unpaid call returns HTTP 402 with the price. The agent signs a USDC payment on Base or Solana (x402), sends it with the call and gets the answer with a receipt. No account or API key is needed.
Which countries and chains does it cover? Full business register coverage for the Netherlands (KVK) and Belgium (KBO), EU VAT numbers through VIES, worldwide sanctions lists (OFAC, EU and UN) and crypto wallets on Base and Solana.
Links
Website: limitguard.ai
Status: status.limitguard.ai
MCP Registry: ai.limitguard.api/limitguard (JSON; the registry has no HTML page per server)
License
MIT
Available Tools
10 toolscheck_agent_walletARead-onlyInspect
Check a counterparty agent's EVM wallet in one call: OFAC SDN digital-currency address list match, Base USDC and ETH balance, ERC-8004 identity registration (and, given an agent id, that agent's owner and payment wallet) and open ERC-8004 feedback, which is not scored. $0.75.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | No | Optional website domain the agent gives for itself (e.g. example.com) | |
| wallet | Yes | EVM wallet address (0x + 40 hex characters) | |
| agent_id | No | Optional ERC-8004 agentId (decimal) the wallet claims |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, non-destructive, open-world behavior, so the bar is lower; the description still adds real context by disclosing the $0.75 per-call cost and noting that open ERC-8004 feedback is returned but not scored. It does not say what happens when a wallet is unregistered or has no sanctions match, which would round this out.
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?
A single dense sentence that front-loads the core action and cost-conscious detail, with every clause mapping to an actual returned check. The long parenthetical nesting makes it slightly harder to scan, but nothing is padding.
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 carries the return-value burden and does so by enumerating all four result components plus pricing. Missing only edge-case behavior (invalid/unregistered wallet, partial results), which is minor for a read-only lookup.
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%, so the baseline is 3; however the description goes beyond the schema by explaining what agent_id actually unlocks (that agent's owner and payment wallet), which the schema does not state. The optional 'domain' parameter is never mentioned, leaving one small gap.
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 ('Check') plus the exact resource ('a counterparty agent's EVM wallet') and enumerates the four sub-checks performed, which is far more informative than a generic 'verify' tool. It does not explicitly distinguish itself from close siblings like verify_wallet or sanctions_screen/wallet_sanctions_preview, so an agent must infer the composite nature of this 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?
The phrase 'counterparty agent's EVM wallet' implies the scenario (vetting an agent you may transact with), but there is no explicit when-to-use, when-not-to-use, or named alternative among the many overlapping sibling tools. Usage must be inferred from the enumerated checks rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_entityARead-onlyInspect
Company check on a business: sanctions screening and country risk, the Dutch KVK register for an NL company, and the website domain when you send it. Returns trust_score (0-100, 100 = best), trust_level (high means low risk), cluster, recommendation, confidence, top_factors and sources_checked.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | No | Optional company website domain | |
| country | Yes | ISO 3166-1 alpha-2 country code | |
| kvk_number | No | Optional Dutch KVK number (8 digits) | |
| entity_name | Yes | Full legal name of the entity |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, openWorld, non-idempotent, non-destructive, so the safety profile is covered. The description adds genuinely useful context the annotations cannot carry: which registries and screening sources are queried, and how to read the output flags ('trust_score 0-100, 100 = best', 'trust_level high means low risk'). It stops short of disclosing latency, cost, coverage limits, or why the call is non-idempotent.
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?
Two sentences, front-loaded with what is checked and followed by what comes back, with no filler or repetition of the title. The output list is dense but each clause adds a distinct fact about coverage or return values.
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 correctly assumes the burden of naming the return keys (trust_score, trust_level, cluster, recommendation, confidence, top_factors, sources_checked) and explaining the two that would otherwise be ambiguous. The remaining gap is routing completeness — it never states when this beats get_trust_score or sanctions_screen for the same entity.
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%, so the schema already documents all four parameters and the baseline is 3. The description only marginally extends this by tying the KVK register to NL companies and flagging the domain as conditional ('when you send it'); entity_name and country get no extra meaning beyond their schema text.
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 states a specific verb and resource ('Company check on a business') and enumerates the exact data sources consulted (sanctions screening, country risk, Dutch KVK register, website domain). That implicitly separates it from the wallet-oriented siblings (verify_wallet, check_agent_wallet), but it never explicitly positions itself against close cohorts like get_trust_score, sanctions_screen, or get_risk_score, which also return risk/trust signals.
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 when-to-use, when-not-to-use, or alternative-routing guidance despite nine siblings with overlapping risk/trust semantics. The only conditional language, 'the website domain when you send it', describes an optional parameter rather than a usage condition, and nothing tells the agent which tool to pick for a wallet versus an entity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_compliance_reportBInspect
Per-entity report built from one real check: registry identity, sanctions and PEP screens, domain signals, risk score with the rules that fired, correlations, every finding as a ranked action, a per-source status table (ok / unavailable / error) and a report hash.
| Name | Required | Description | Default |
|---|---|---|---|
| iban | No | Optional IBAN (never stored raw) | |
| domain | No | Optional company website domain | |
| country | No | ISO 3166-1 alpha-2 country code | |
| check_id | No | Id of a check from an earlier report, instead of identifiers | |
| cbe_number | No | Optional Belgian CBE number (0XXX.XXX.XXX or 10 digits) | |
| kvk_number | No | Optional Dutch KVK number (8 digits) | |
| vat_number | No | Optional EU VAT number | |
| entity_name | No | Full legal name (with country; omit when sending check_id) | |
| wallet_chain | No | Optional chain for wallet_address (eth, base, btc, sol, ...) | |
| wallet_address | No | Optional crypto wallet address (format check only) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false, idempotentHint=false and openWorldHint=true, and 'built from one real check' plus the per-source ok/unavailable/error table add real context: this performs an actual external check that can partially fail. It still does not explain the cost/side-effect implied by readOnlyHint=false, nor whether a report is persisted or reusable.
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?
A single sentence that front-loads the resource and scope, then lists report sections compactly. It is dense but each clause enumerates a distinct output component, which earns its place given there is no output schema.
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, enumerating the report contents (identity, screens, risk score with fired rules, ranked findings, source status table, hash) is genuinely necessary and is done thoroughly. What is missing is operational context: when to use it versus sibling checks and what the non-read-only, non-idempotent behavior implies.
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% across all 10 parameters, so the schema already documents identifiers, formats and the check_id alternative. The description adds no parameter-level meaning beyond what the schema provides, 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?
The description names the resource ('Per-entity report') and enumerates exactly what the report contains, so an agent knows this produces a comprehensive per-entity artifact rather than a single score. However, it never explicitly contrasts itself with siblings like check_entity, get_risk_score, or sanctions_screen, which it partly subsumes, so the agent must infer the boundary.
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 when-to-use guidance, no prerequisites, and no mention of alternatives among the many overlapping siblings (check_entity, get_risk_score, sanctions_screen). The phrase 'built from one real check' hints at a trigger but never says when an agent should pick this over a cheaper single-purpose tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_risk_scoreARead-onlyInspect
Quick risk score from sanctions screening and country risk only, without the register or domain lookups of check_entity. Returns risk_score (0-100, 100 = riskiest), risk_level (high means high risk, the reverse of check_entity's trust_level), sanctions_match and fatf_status; no recommendation or factors.
| Name | Required | Description | Default |
|---|---|---|---|
| country | Yes | ISO 3166-1 alpha-2 country code | |
| entity_name | Yes | Full legal name of the entity |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations (readOnlyHint/openWorldHint) by disclosing the exact data sources used, the fields returned, and critically that risk_level polarity is inverted relative to check_entity's trust_level — a subtlety that would otherwise cause misinterpretation. It also states what is deliberately absent (recommendation, factors).
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?
Two dense sentences, front-loaded with the scope boundary and the differing-from-sibling caveat. Every clause conveys load-bearing information (scope, return fields, polarity warning, exclusions) with no 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 available, the description compensates by enumerating the return fields and their meaning. Combined with the scope restriction and the polarity warning, an agent has everything needed to call and interpret this tool 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% (country as ISO 3166-1 alpha-2, entity_name as full legal name), so the schema already carries parameter meaning. The description adds no format or constraint detail beyond that, which matches the baseline of 3 when structured data does the heavy lifting.
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+resource ('risk score from sanctions screening and country risk') and immediately bounds the scope against a named sibling ('without the register or domain lookups of check_entity'). An agent can distinguish it from check_entity, get_trust_score and sanctions_preview 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?
The phrase 'without the register or domain lookups of check_entity' implicitly tells the agent to pick this tool when the lighter sanctions+country check suffices, and names the alternative. It stops short of an explicit 'use this when / avoid this when' statement or cost/latency rationale, so it is clear but not fully prescriptive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_trust_scoreARead-onlyInspect
Look up your own most recent trust score for an entity you checked before, from your stored checks: score, level, when, which product, trend and how many checks are on record. Runs no new check and calls no data source. Free ($0).
| Name | Required | Description | Default |
|---|---|---|---|
| entity_id | Yes | Entity name, as sent to check_entity |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint, openWorldHint false, destructiveHint false), it adds that no new check runs, no data source is called, and the operation is free ($0). It also lists the returned fields, which matters since no output schema exists, though it does not cover error cases such as having no stored check.
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 front-loaded sentences with zero waste: purpose and scope first, then the no-new-check constraint, then cost. The field list is compact and every sentence earns its place.
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 simple read-only lookup with full schema coverage and annotations, the description covers purpose, constraints, cost, and return fields (necessary because no output schema exists). Nothing critical for correct invocation is 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% and the single entity_id parameter is already documented as 'Entity name, as sent to check_entity.' The description reinforces that the entity must have been checked before, but adds no syntax or format detail beyond the schema.
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 states a specific verb (look up), resource (your own most recent trust score), and scope (for an entity you checked before, from your stored checks). It distinguishes itself from sibling tools like check_entity by explicitly noting it 'Runs no new check and calls no data source.'
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?
It clearly states the usage context: only for entities previously checked, pulling from stored checks. It also implies when not to use it by noting no new check runs, but it never names check_entity or another alternative for fresh checks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sanctions_previewARead-onlyInspect
Free yes/no sanctions preview against the local OFAC SDN, EU and UN lists. Returns possible_match, lists_checked, list_dates and list_note only, never an entry. 10 per caller per UTC day.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Company or person name to screen | |
| country | No | Optional ISO 3166-1 alpha-2 country code (orders matches, never excludes one) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds genuinely new behavioral context: it enumerates the exact return fields, states it never returns an entry, notes screening is against *local* lists, and publishes a rate limit of 10 per caller per UTC day — all things annotations cannot convey.
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 short sentences with zero filler; the core purpose and the free/preview constraint are front-loaded, and the return-field list and rate limit follow in descending order of importance. Every sentence earns its place.
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?
There is no output schema, so the description carries the return burden and does so by naming the four fields returned. What remains unexplained is the semantics of the fields (e.g. what list_note contains) and what an agent should do on a positive possible_match; these gaps are minor for a preview 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 description coverage is 100%, so both parameters (name, country) are already documented, including the important note that country only orders matches and never excludes one. The description adds no syntax or format detail beyond the schema, so the baseline 3 is 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 (yes/no preview) and resource (local OFAC SDN, EU and UN sanction lists), and the phrase 'never an entry' signals it differs from a full screening tool. It is clear without opening the schema, but it never names the sibling sanctions_screen or wallet_sanctions_preview, so the differentiation remains implicit rather than explicit.
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?
The 'Free yes/no preview' framing plus the 10/caller/day cap implies this is the cheap first-pass check and that a heavier tool is needed for actual entries, but no alternative is named and no when-not-to-use condition is stated. Usage is inferable but not spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sanctions_screenARead-onlyInspect
Sanctions screen against the local OFAC SDN, EU and UN lists: matched entries with list, entry id, programmes, countries, listing date and match score. A name match is not a determination.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Company or person name to screen | |
| country | No | Optional ISO 3166-1 alpha-2 country code (orders matches, never excludes one) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint=true, destructiveHint=false, openWorldHint=true), so the bar is lower. The description still adds real value by naming the specific list sources screened and by including the 'a name match is not a determination' disclaimer, which shapes how an agent should interpret a hit. It omits any mention of match-score thresholds or how openWorld access affects latency/results.
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?
Two sentences, front-loaded with what is screened and what is returned; the caveat comes last where it belongs. The field enumeration in sentence one is dense but each item earns its place given there is no output schema.
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 usefully compensates by listing the returned fields (list, entry id, programmes, countries, listing date, match score). The main remaining gap is that 'match score' is not explained (scale or threshold), which an agent would need to interpret results 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%, and the schema already explains the non-obvious behavior of country ('orders matches, never excludes one'). The description adds nothing about parameters, so the baseline of 3 applies when the schema does all the work.
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 gives a specific verb (screen) and resource (sanctions lists: OFAC SDN, EU, UN) and even enumerates the returned fields, so the purpose is unambiguous. However, it never differentiates itself from the closely named siblings sanctions_preview and wallet_sanctions_preview, so an agent cannot tell them apart from the text alone.
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 statement of when to use this tool versus sanctions_preview, wallet_sanctions_preview, or check_entity. The only guidance-like sentence, 'A name match is not a determination,' is an interpretive caveat about results, not usage direction, leaving the agent to infer selection context from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_leadARead-onlyInspect
Verify a NL/BE sales lead against the registers in one call: real and active, VAT, mail server, IBAN, sanctions; a 0-100 lead score. $0.27.
| Name | Required | Description | Default |
|---|---|---|---|
| iban | No | IBAN the lead gave; only country, bank, BIC and last 4 are returned | |
| name | No | Company name as the lead gave it (NL without a number) | |
| No | Contact email; only its domain is checked | ||
| phone | No | Phone number the lead gave; compared with the numbers the company publishes, never echoed. Rejected until website phone lookup is switched on | |
| domain | No | Company website domain | |
| address | No | {street, house_number, postcode, city} the lead gave | |
| country | Yes | NL (KVK) or BE (KBO) | |
| vat_number | No | EU VAT number, checked with VIES | |
| target_size | No | Ideal-customer employee range {min, max}, both inclusive; information only | |
| company_number | No | 8-digit KVK number or 10-digit KBO/CBE number | |
| target_industries | No | Ideal-customer industries: SBI/NACE code prefixes ("62") or whole words; information only |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnlyHint=true, openWorldHint=true, destructiveHint=false), so the bar is lower. The description adds genuinely useful context beyond them: the $0.27 cost, that it hits external registers, and the composite 0-100 output. It stops short of disclosing latency or what a partial/failed match returns.
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?
A single dense sentence that front-loads the scope and enumerates the checks without waste. No filler, nothing repeated from annotations or schema.
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 an 11-parameter tool with nested objects and no output schema, the description names the output (0-100 lead score) and the verification domains, which is what an agent needs at selection time. Missing only edge-case/failure behavior, which is minor given the rich schema.
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 each parameter (IBAN partial return, email domain-only, phone rejection, VAT/VIES) is already well documented in the schema. The description adds no parameter-level syntax or format guidance beyond what is structured, 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 precise verb (Verify) and resource (NL/BE sales lead) and enumerates the five checks performed plus the 0-100 lead score output. It differentiates by region and 'sales lead' framing, though it never names which sibling (check_entity, sanctions_screen) it supersedes despite overlapping on sanctions.
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?
The phrase 'in one call' implies this consolidates multiple checks and is preferable to calling several sibling tools separately, which is useful implied guidance. There is no explicit when-to-use/when-not or prerequisite statement, so an agent must infer the routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_walletARead-onlyInspect
Screen a wallet: OFAC SDN address match, on-chain signals (contract check, native and USDC balance, transaction count, first seen on Base) and named risk rules with up to 3 advice items. On Base, also reports any ERC-8004 agent the wallet owns and its open on-chain reputation as descriptive signals, never scored. $0.11. Supports EVM and Solana addresses.
| Name | Required | Description | Default |
|---|---|---|---|
| chain_id | No | CAIP-2 chain ID (default: eip155:8453 for Base); base, eth, solana, btc also accepted | |
| wallet_address | Yes | Blockchain wallet address |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds real context beyond that: a $0.11 cost, that agent reputation signals are descriptive and 'never scored', that advice is capped at 3 items, and that ERC-8004/agent reporting only applies on Base. It omits that results are time-sensitive (idempotentHint=false), which would be useful for a screening tool.
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 core verb and result composition, then layered detail. Every sentence carries information (signal list, scoring caveat, price, address support), though the on-chain signal enumeration is dense.
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 convey what is returned, and it does so thoroughly: the signal categories, the advice-item cap, the descriptive-only agent reputation, and chain coverage. The main omission is any note that results change over time, but overall it is sufficient for correct invocation.
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% (chain_id documents CAIP-2 format and defaults, wallet_address is documented), so the schema carries the parameter burden and baseline is 3. The description adds only light context — 'Supports EVM and Solana addresses' and Base-specific behavior — without new syntax or format detail.
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 gives a specific verb (screen) and resource (wallet) and enumerates exactly which signals are produced (OFAC SDN match, on-chain signals, named risk rules, advice items), so the agent knows precisely what the tool yields. It does not, however, name or contrast itself with the heavily overlapping siblings (sanctions_screen, wallet_sanctions_preview, check_agent_wallet), so sibling differentiation is left to inference.
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 or when-not-to-use guidance, and no alternative is named despite several siblings that also screen wallets for sanctions/risk. The mention of EVM and Solana support and Base-specific behavior implies scope but does not route the agent between this tool and its near-duplicates.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wallet_sanctions_previewARead-onlyInspect
Free yes/no check of a wallet address against the OFAC SDN list: sanctioned, lists, the list date and its freshness, no programmes or entry ids. 10 per caller per UTC day, separate from sanctions_preview. The full wallet screen is verify_wallet ($0.11).
| Name | Required | Description | Default |
|---|---|---|---|
| chain_id | No | CAIP-2 chain ID (default: eip155:8453 for Base); base, eth, solana, btc also accepted | |
| wallet_address | Yes | Blockchain wallet address |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint, destructiveHint=false), so the bar is lower; the description adds real value on top with a precise rate limit ('10 per caller per UTC day'), the exact fields returned and withheld, and the cost of the deeper alternative. It stops short of describing failure/latency behavior or what a non-match response looks like.
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?
Compressed into two sentences with the core purpose front-loaded and no filler. The middle clause ('sanctioned, lists, the list date and its freshness') is telegraphic and slightly strained to parse, which costs a point, but overall density is high and every clause carries information.
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 compensates by enumerating the returned fields and exclusions, plus rate limits and the paid alternative. An agent has enough to call it correctly and interpret the result, though the handling of the optional chain_id default in a sanctions context is left entirely to the schema.
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 both parameters (wallet_address, chain_id) are documented in the schema, including CAIP-2 format and accepted chains, so the description need not repeat them. It adds no parameter-level meaning beyond the schema, which is the baseline-3 case.
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+resource (yes/no check of a wallet address against the OFAC SDN list) and explicitly scopes the output fields ('sanctioned, lists, the list date and its freshness') while naming what is excluded ('no programmes or entry ids'). It also distinguishes itself from siblings by flagging 'separate from sanctions_preview' and pointing to verify_wallet for the full screen.
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 concrete routing context: free tier, 10 per caller per UTC day, and an explicit alternative ('The full wallet screen is verify_wallet ($0.11)') so the agent can trade cost against depth. It doesn't state an explicit when-not-to-use condition or the quota interaction with sanctions_preview beyond noting they are separate.
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.
10 tool updates
v2.11.9- First observed
check_agent_wallet - First observed
check_entity - First observed
get_compliance_report - First observed
get_risk_score - First observed
get_trust_score - First observed
sanctions_preview - First observed
sanctions_screen - First observed
verify_lead - First observed
verify_wallet - First observed
wallet_sanctions_preview
TDQS
Scored across 10 tools
The set has several clusters of overlapping tools: check_entity vs get_risk_score vs get_compliance_report vs get_trust_score all serve entity risk, and verify_wallet vs wallet_sanctions_preview vs check_agent_wallet all screen wallets, with sanctions_preview/sanctions_screen/wallet_sanctions_preview forming a third cluster. The descriptions do a good job cross-referencing depth and pricing to differentiate them, but the semantic inversion between check_entity's trust_level (high=low risk) and get_risk_score's risk_level (high=high risk) is a genuine misselection trap.
Most names follow a verb_noun pattern (check_entity, get_trust_score, verify_wallet, get_compliance_report, verify_lead). Verb choice varies across synonyms (check_ vs get_ vs verify_) and the three sanctions_* tools drop the verb entirely, which is a minor deviation rather than a break in convention.
Ten tools is well-scoped for a screening service, and each tool occupies a distinct niche defined by target (entity/wallet/agent/lead), depth (preview/full/report) and cost. Nothing feels like filler or a duplicate entry.
The surface covers entity checks, quick risk scoring, full sanctions screening, wallets, agent wallets, compliance reporting, stored-score retrieval and lead verification—broad lifecycle coverage for a risk-screening domain. Gaps like ongoing monitoring, PEP-only screens or bulk/batch checks exist but are minor workarounds.
Maintenance
Related MCP Connectors
Sanctions Screening MCP — screen people, companies, vessels, and aircraft
Verify companies, domains and counterparties before transacting. Sanctions, UBO, fraud scoring.
Sanctions screening (OFAC/UK/EU/UN) + PEP + GLEIF entities via Compliance Engine.
Sanctions, PEP, watchlist, recall, business, and contract screening. Free tier, no auth required.
Related MCP Servers
- AlicenseAqualityAmaintenanceProvides AI agents with compliance screening (OFAC sanctions, risk scoring, Know-Your-Agent) plus disposable email and SMS verification for OTPs, accessible via MCP tools, HTTP API, and CLI.102MIT
- AlicenseNot gradedqualityFmaintenanceeu-verify lets AI agents verify any European business partner: company existence (official French SIREN registry), insolvency records (BODACC), EU VAT validation before invoicing (VIES), SIRET/IBAN/LEI checks, address and email verification, French business-day deadlines and EU public tenders. 10 paid MCP tools + a free catalog tool, plus 81 HTTP endpoints. Each call costs $0.001-$0.01 in USDC on1MIT
- AlicenseBqualityBmaintenanceAutonomous M2M compliance and trust APIs for AI agents (KYB, OFAC, VAT, Sanctions checking).5MIT
- FlicenseNot gradedqualityCmaintenanceScreens names and companies against OFAC, EU, UK, and UN sanctions lists with fuzzy-match scores, supporting bulk lookups for AML/KYC checks. Data is sourced directly from official government lists and cached for fast repeat checks.-