Agent Preflight: OFAC, DNS, Email Auth, Domain, Email & URL
$0.01/call via x402: OFAC wallet screen, DNS, email auth, domain age, email verify, URL unshorten.
Should I use this
Quality & Safety
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"agent-preflight": {
"url": "https://sdn-screen-x402.sdnscreen.workers.dev/mcp"
}
}
}Remote endpoints
https://sdn-screen-x402.sdnscreen.workers.dev/mcpstreamable-httpWhat it can do
Tool inventory
Tools (6)
🟢ofac_wallet_screen(address)
Screens a crypto wallet address (EVM, BTC, TRON, SOL, XMR and every other chain OFAC lists) against all Digital Currency Addresses on the US Treasury OFAC SDN list. Returns sanctioned true/false, verdict block/no_match, SDN entity name, sdnType, programs and the list publish date. Use when an agent is about to send funds to, pay, or accept funds from an unfamiliar wallet. $0.01 USDC on Base. Paid tool: call it once to get the x402 PaymentRequired object, then retry with params._meta["x402/payment"].
Input Schema
{
"type": "object",
"properties": {
"address": {
"type": "string",
"minLength": 20,
"maxLength": 128,
"pattern": "^[A-Za-z0-9:_-]+$",
"description": "Wallet address. EVM 0x... (case-insensitive), BTC 1.../3.../bc1..., TRON T..., Solana base58, etc."
}
},
"required": [
"address"
],
"additionalProperties": false
}🟢dns_lookup(name, type)
Resolves live DNS records for any domain or hostname via 1.1.1.1: A, AAAA, CNAME, MX, NS, TXT, SOA and CAA in one call (type=ALL), or a single type incl. SRV, PTR, DS, DNSKEY, HTTPS. Clean JSON with TTLs, NXDOMAIN flag and DNSSEC-authenticated bit. A URL or email address is reduced to its host. Use when an agent needs to verify a domain, find mail servers or nameservers, or read TXT/SPF records. $0.01 USDC on Base. Paid tool: call it once to get the x402 PaymentRequired object, then retry with params._meta["x402/payment"].
Input Schema
{
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 3,
"maxLength": 253,
"description": "Domain or hostname, e.g. example.com. A full URL or email address is accepted and reduced to its host. Alias: domain.",
"examples": [
"example.com"
]
},
"type": {
"type": "string",
"enum": [
"ALL",
"A",
"AAAA",
"CNAME",
"MX",
"NS",
"TXT",
"SOA",
"CAA",
"SRV",
"PTR",
"DS",
"DNSKEY",
"HTTPS"
],
"default": "ALL",
"description": "ALL (default: A, AAAA, CNAME, MX, NS, TXT, SOA, CAA) or one record type."
}
},
"required": [
"name"
],
"additionalProperties": false
}🟢email_auth_check(domain, selector)
Checks a domain's email authentication: parses SPF (+all, ?all, multiple records, over 10 DNS lookups), DMARC (p, sp, pct, rua), DKIM keys (your selector or 15 common ones) and MX, then returns an A-F grade, 0-100 score and coded issues (spf_missing, dmarc_p_none, ...). Use when an agent must judge if a domain can be spoofed, debug deliverability, or vet a sender/vendor domain. $0.01 USDC on Base. Paid tool: call it once to get the x402 PaymentRequired object, then retry with params._meta["x402/payment"].
Input Schema
{
"type": "object",
"properties": {
"domain": {
"type": "string",
"minLength": 3,
"maxLength": 253,
"description": "Email domain, e.g. example.com. A URL or email address is reduced to its domain.",
"examples": [
"example.com"
]
},
"selector": {
"type": "string",
"maxLength": 63,
"pattern": "^[A-Za-z0-9._-]+$",
"description": "Optional DKIM selector to check authoritatively (in addition to the common list: google, selector1, selector2, default, k1, k2, s1, s2, dkim, mail, mandrill, pm, zoho, protonmail, fm1)."
}
},
"required": [
"domain"
],
"additionalProperties": false
}🟢whois_domain_age(domain)
Looks up a domain in its registry's RDAP server (the ICANN successor to WHOIS, found via the IANA bootstrap): registration date, age in days/years, newlyRegistered (<30 days), expiry, last change, registrar name + IANA ID, EPP status, nameservers and DNSSEC. No personal contact data. Use when an agent must judge if a domain, sender or vendor is brand-new (a phishing/fraud signal). Unsupported TLDs return 400, uncharged. $0.01 USDC. Paid tool: call it once to get the x402 PaymentRequired object, then retry with params._meta["x402/payment"].
Input Schema
{
"type": "object",
"properties": {
"domain": {
"type": "string",
"minLength": 3,
"maxLength": 253,
"description": "Domain, e.g. example.com. A URL, hostname or email address is reduced to its registrable domain. Alias: name.",
"examples": [
"example.com"
]
}
},
"required": [
"domain"
],
"additionalProperties": false
}🟢email_mx_verify(email)
Checks an email address without sending mail or opening SMTP: syntax, domain exists, MX records (or RFC 5321 A/AAAA fallback), RFC 7505 null MX, MX host resolves, disposable-domain list (~9.9k domains), role account (info@, support@) and free provider. Verdict deliverable_domain, risky, undeliverable or unknown. Cannot prove the mailbox itself exists. Use when an agent validates a signup, lead or contact email before using it. $0.01 USDC. Paid tool: call it once to get the x402 PaymentRequired object, then retry with params._meta["x402/payment"].
Input Schema
{
"type": "object",
"properties": {
"email": {
"type": "string",
"minLength": 6,
"maxLength": 254,
"examples": [
"[email protected]"
],
"description": "Email address to check, e.g. [email protected]"
}
},
"required": [
"email"
],
"additionalProperties": false
}🟢url_unshorten(url)
Follows a URL's HTTP redirects hop by hop (max 10, page bodies never read) and returns the final URL, status, the full chain and heuristic safety flags: shortener_used, cross_domain_redirect, https_downgrade, ip_address_host, punycode_host, userinfo_in_url, high_abuse_tld, credential_keyword_after_redirect, loops. Risk low/medium/high. Use before an agent clicks, fetches or forwards an unfamiliar or shortened link. Not a malware-reputation lookup. $0.01 USDC. Paid tool: call it once to get the x402 PaymentRequired object, then retry with params._meta["x402/payment"].
Input Schema
{
"type": "object",
"properties": {
"url": {
"type": "string",
"minLength": 4,
"maxLength": 2048,
"examples": [
"https://bit.ly/3x402"
],
"description": "http(s) URL to expand. A bare host gets https:// added. Private/loopback hosts are refused."
}
},
"required": [
"url"
],
"additionalProperties": false
}Community
Evidence