Agent Preflight: OFAC, DNS, Email Auth, Domain, Email & URL
Server Details
$0.01/call via x402: OFAC wallet screen, DNS, email auth, domain age, email verify, URL unshorten.
- Status
- Healthy
- Uptime
- 100.0% over 22 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 6 tools
Each tool has a distinct focus (DNS records, email auth posture, mailbox deliverability, wallet sanctions, URL redirects, domain age), but dns_lookup, email_auth_check, email_mx_verify and whois_domain_age all touch the same domain-investigation space, so an agent could occasionally hesitate over which to pick for a 'vet this domain' task. The descriptions do clearly bound each one (raw DNS vs SPF/DMARC/DKIM grading vs mailbox-level verdict vs registry age).
All six names are snake_case with a resource-oriented prefix (dns_, email_, ofac_, url_, whois_) plus a descriptive suffix, which is predictable and readable. Minor deviation in ordering: dns_lookup/url_unshorten read noun_verb while email_auth_check/email_mx_verify/ofac_wallet_screen read noun_noun_verb, so the pattern is not perfectly uniform.
Six tools is well-scoped for a preflight-check server covering the DNS, email, URL and wallet domains. Each tool corresponds to a distinct check an agent would plausibly run before acting, with no filler.
Coverage is strong: live DNS, SPF/DMARC/DKIM, MX/mailbox risk, OFAC wallet sanctions, redirect-chain safety and domain age span the stated purpose. Gaps remain around the wallet/URL side (no malware/reputation lookup, explicitly disclaimed; no IP or TLS/certificate check), which an agent would have to source elsewhere.
Available Tools
6 toolsdns_lookupDNS Records LookupARead-onlyIdempotentInspect
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"].
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Domain or hostname, e.g. example.com. A full URL or email address is accepted and reduced to its host. Alias: domain. | |
| type | No | ALL (default: A, AAAA, CNAME, MX, NS, TXT, SOA, CAA) or one record type. | ALL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent/openWorld annotations, the description discloses the return shape (clean JSON with TTLs, NXDOMAIN flag, DNSSEC-authenticated bit), input normalization (URL/email reduced to host), and critically the paid x402 flow requiring a first call for the PaymentRequired object then a retry with _meta["x402/payment"]. That is exactly the operational context 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?
Front-loaded with verb+resource and packed densely with high-value details (record types, return shape, payment flow). Slightly redundant in re-listing enum values already in the schema, but no wasted sentences.
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, so the description carries the burden of describing return values (TTLs, NXDOMAIN flag, DNSSEC bit) and it does so. It also covers the non-obvious payment handshake, which is the riskiest part of invoking this tool, leaving nothing essential 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 schema already documents 'name' and the 'type' enum including the ALL default set. The description mostly restates the enum contents (SRV, PTR, DS, DNSKEY, HTTPS) rather than adding meaning, 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 (resolves) and resource (live DNS records for any domain or hostname) plus the resolver used (1.1.1.1) and the record types covered. An agent can distinguish it from siblings like email_auth_check or whois_domain_age 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 clear triggering contexts: verify a domain, find mail servers or nameservers, read TXT/SPF records. It does not, however, explicitly name sibling alternatives or state when NOT to use it (e.g. vs email_mx_verify for mail checks), so the routing guidance is contextual rather than complete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
email_auth_checkEmail Auth Check (SPF/DMARC/DKIM)ARead-onlyIdempotentInspect
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"].
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Email domain, e.g. example.com. A URL or email address is reduced to its domain. | |
| selector | No | 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). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial context beyond the annotations: the paid x402 flow ($0.01 USDC on Base), the required two-step call pattern with params._meta["x402/payment"], the 10-DNS-lookup SPF budget, and the exact shape of the returned grading data. The payment prerequisite in particular is behavior an agent cannot infer from readOnlyHint/idempotentHint alone.
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?
Information-dense and front-loaded: capability first, then grading output, then usage conditions, then payment mechanics. The final payment sentence is long and slightly run-on, but every clause carries operational value rather than 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 still specifies the return shape (A-F grade, 0-100 score, coded issue identifiers) and the unique payment handshake needed to actually get a result. Nothing essential for a correct first 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 description coverage is 100%, so both parameters are already fully documented, including the reduction of URLs/emails to a domain and the common DKIM selector list. The description's mention of 'your selector or 15 common ones' largely restates the schema, so 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 and resource ('checks a domain's email authentication') and enumerates exactly what is parsed: SPF, DMARC, DKIM keys and MX. It also names the concrete return artifacts (A-F grade, 0-100 score, coded issues), which clearly separates it from siblings like dns_lookup and email_mx_verify.
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 three explicit use cases (judging spoofability, debugging deliverability, vetting a sender/vendor domain), which is well above generic 'use this tool' filler. It does not, however, contrast itself with the nearest alternatives such as email_mx_verify or dns_lookup, so a routing decision still requires inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
email_mx_verifyEmail Address Verify (MX, no SMTP)ARead-onlyIdempotentInspect
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"].
| Name | Required | Description | Default |
|---|---|---|---|
| Yes | Email address to check, e.g. someone@example.com |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnly, idempotent, non-destructive, openWorld), but the description adds behavior the annotations cannot: no mail is sent and no SMTP connection is opened, the possible verdict values, the explicit epistemic limit (mailbox existence is not provable), the $0.01 USDC cost, and the two-step x402 payment retry flow. Cost and payment mechanics are exactly the kind of hidden behavior agents need disclosed.
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?
Information-dense with no filler: the check enumeration, verdict set, limitation, usage trigger, price, and payment handshake each occupy one clause. The usage cue and payment caveat are front-loaded in positions an agent will read before invoking.
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 single-parameter verification tool with no output schema, the description supplies everything needed: what is checked, what verdicts come back, the confidence ceiling, when to use it, and the paid-invocation protocol. No return-shape documentation is needed because verdicts are already named inline.
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?
Only one parameter and schema description coverage is 100% (the schema documents it with an example and length bounds), so the schema does the heavy lifting. The description adds no syntax, normalization, or format guidance beyond what the schema already states, which matches the baseline for high-coverage schemas.
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 (checks) plus a fully enumerated resource scope: syntax, domain, MX records, A/AAAA fallback, RFC 7505 null MX, disposable list, role account and free provider. This is clearly distinguishable from siblings like dns_lookup (generic DNS) and email_auth_check (SPF/DKIM/DMARC), which the description implicitly excludes by scoping itself to MX-only verification.
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 a concrete usage context ('use when an agent validates a signup, lead or contact email before using it') and a clear limitation boundary ('cannot prove the mailbox itself exists', 'no SMTP'). It does not name a sibling tool as an alternative nor say when to prefer email_auth_check, so it stops short of full when/when-not routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ofac_wallet_screenOFAC SDN Wallet ScreenARead-onlyIdempotentInspect
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"].
| Name | Required | Description | Default |
|---|---|---|---|
| address | Yes | Wallet address. EVM 0x... (case-insensitive), BTC 1.../3.../bc1..., TRON T..., Solana base58, etc. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish that this is a read-only, idempotent, non-destructive, open-world call. The description adds crucial behavior beyond that: it is a paid tool costing $0.01 USDC on Base, requires a two-step x402 payment flow, and returns specific verdict fields.
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?
Four dense sentences with zero waste: purpose is front-loaded, return values follow, then usage trigger, then payment mechanics. Every sentence earns its place and supports correct invocation.
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 supplies the return shape (sanctioned true/false, verdict, SDN entity name, sdnType, programs, publish date). It also covers cost, payment protocol, and usage context, so 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 coverage is 100%, so the schema already documents the sole address parameter, including format examples. The description still adds value by naming supported chains beyond the schema examples (XMR, every chain OFAC lists).
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 (screens) and resource (crypto wallet address) against a precisely named source (US Treasury OFAC SDN list), and enumerates supported chains. It is clearly distinguishable from all siblings, which cover DNS, email, URL, and whois checks, not sanctions screening.
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: use when about to send funds to, pay, or accept funds from an unfamiliar wallet. It does not name alternatives or when-not cases, but no sibling tool overlaps with this function, so the guidance is contextually clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
url_unshortenURL Unshorten & Redirect CheckARead-onlyIdempotentInspect
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"].
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | http(s) URL to expand. A bare host gets https:// added. Private/loopback hosts are refused. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this read-only, idempotent, non-destructive, and open-world, but the description adds much more: a 10-hop cap, the fact that page bodies are never read, the full list of safety flags computed, the low/medium/high risk scale, and the two-step x402 payment handshake. That payment flow is the kind of operational detail annotations cannot express and would otherwise strand the agent on a PaymentRequired response.
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 outcome, then the flags, then the when-to-use, then cost and payment mechanics — a sensible ordering with no filler sentences. The flag enumeration and the payment retry sentence are dense, but each clause conveys information an agent actually needs before calling.
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, yet the description compensates by naming every returned element (final URL, status, chain, the nine flags, risk level), and it covers the non-obvious paid-invocation protocol. For a one-parameter tool, nothing needed to call it correctly or interpret the result 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 description coverage is 100% and the single 'url' parameter already documents the example, length bounds, https:// normalization, and refusal of private/loopback hosts. The description adds no parameter-level detail beyond what the schema already 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?
States a specific verb and resource ('follows a URL's HTTP redirects hop by hop') and enumerates exactly what is returned: final URL, status, full chain, and named heuristic safety flags. It is unmistakably distinct from siblings like dns_lookup, whois_domain_age, and email_auth_check, which operate on domains or mail infrastructure rather than on a single link's hop chain.
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 ('Use before an agent clicks, fetches or forwards an unfamiliar or shortened link') and an explicit exclusion ('Not a malware-reputation lookup'), so the agent knows both when to reach for it and when to look elsewhere. The cost line ($0.01 USDC) also lets the agent weigh it against free sibling lookups.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
whois_domain_ageDomain Age & Registrar (RDAP)ARead-onlyIdempotentInspect
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"].
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Domain, e.g. example.com. A URL, hostname or email address is reduced to its registrable domain. Alias: name. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only/idempotent/non-destructive, and the description adds material context beyond them: unsupported TLDs return 400 uncharged, the $0.01 USDC cost, the x402 PaymentRequired handshake and retry with params._meta['x402/payment'], and the absence of personal contact data. These are exactly the operational facts an agent needs before invoking a paid, open-world 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-loads what is returned, then usage, then error and payment behavior. Dense but every clause carries information; the payment-handshake sentence is verbose but necessary for correct invocation.
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, and it additionally covers the error case (400 for unsupported TLDs), the cost, and the two-step payment flow. 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% and the schema already explains normalization of URLs/hostnames/emails to a registrable domain plus the 'name' alias. The description adds nothing about the single domain parameter, so the baseline of 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 (looks up a domain in its registry's RDAP server) and enumerates the returned data fields (registration date, age, newlyRegistered, expiry, registrar, EPP status, nameservers, DNSSEC). It also distinguishes itself from siblings like dns_lookup by noting RDAP is the WHOIS successor and by returning registrar/registration metadata rather than DNS records.
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?
Explicitly states when to use it: judging whether a domain, sender or vendor is brand-new as a phishing/fraud signal. It does not name alternatives (e.g. dns_lookup or url_unshorten) or state when not to use it, but the triggering context is clear and actionable.
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.
3 tool updates
- Added
email_mx_verify - Added
url_unshorten - Added
whois_domain_age
3 tool updates
- First observed
dns_lookup - First observed
email_auth_check - First observed
ofac_wallet_screen
Related MCP Connectors
Email, phone, domain, URL & OFAC verification; phishing and IBAN checks via x402.
Screen a party vs OFAC, EU and UK sanctions lists before paying. $0.02/call via x402.
Pay-per-call compliance data: OFAC sanctions, merchant check, LEI, SEC, WHOIS, FX. x402 in USDC/XRP
Token risk, wallet profiles, OFAC screening, whale trades on 6 chains. x402, USDC per call.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to run pay-per-call checks on US freight carriers and brokers, OFAC sanctions lists, and African FX rates using x402 micropayments or a prepaid pass without an API key.49 npmMIT
- AlicenseNot gradedqualityFmaintenanceArchived and no longer maintained. Tools and prices shown here are out of date. Use the maintained server: glama.ai/mcp/servers/OceanAlt666/oceanalt-aml-mcp (GitHub: OceanAlt666/oceanalt-aml-mcp).220 npmMIT

CompliAPIofficial
AlicenseNot gradedqualityCmaintenanceReal-time OFAC and global sanctions screening for AI agents: screen crypto addresses, emails, websites, government IDs, and countries against OFAC SDN and 10+ sanctions/crime/risk lists, plus PEP screening, VPN detection, and IP geolocation. Hosted remote streamable-HTTP server at https://api.compliapi.com/mcp (anonymous tools/list; free API key or x402 pay-per-call).MIT- AlicenseNot gradedqualityDmaintenanceVerify x402 endpoints before your agent spends. Three tools: verify (SPEND/CAUTION/INVESTIGATE/DO NOT SPEND backed by 50K+ services), passport (full trust identity), risk_check (deep assessment). No API keys, no signup.12 npmMIT
Glama MCP Gateway
Add one secure layer between your agents and this server.