protogrid

Search / com.oceanalt/aml

aml

R0· no sign-in

Pre-payment checks for AI agents: sanctions and AML screening of payees, payment pages and requests.

v0.7.4 · active · repository · website · descriptor JSON · versions

An agent can connect right now, no human step.Remote endpoint, no authentication, reachable on the last probe.
Quality85good
Trust96of 100
Uptime, 30 days99%
Latency p501421 ms

Connect

8 clients · secrets stay placeholders
{
  "mcpServers": {
    "aml": {
      "type": "http",
      "url": "https://oceanalt.com/api/mcp"
    }
  }
}
claude mcp add --transport http aml https://oceanalt.com/api/mcp
[mcp_servers.aml]
url = "https://oceanalt.com/api/mcp"
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "aml": {
      "type": "remote",
      "url": "https://oceanalt.com/api/mcp",
      "enabled": true
    }
  }
}
{
  "mcpServers": {
    "aml": {
      "type": "http",
      "url": "https://oceanalt.com/api/mcp"
    }
  },
  "deeplink": "cursor://anysphere.cursor-deeplink/mcp/install?name=aml&config=eyJ0eXBlIjoiaHR0cCIsInVybCI6Imh0dHBzOi8vb2NlYW5hbHQuY29tL2FwaS9tY3AifQ%3D%3D"
}
{
  "servers": {
    "aml": {
      "type": "http",
      "url": "https://oceanalt.com/api/mcp"
    }
  }
}
{
  "mcpServers": {
    "aml": {
      "httpUrl": "https://oceanalt.com/api/mcp"
    }
  }
}
extensions:
  "aml":
    enabled: true
    name: "aml"
    type: streamable_http
    uri: "https://oceanalt.com/api/mcp"
    timeout: 300

Quality 85 / 100good

protocol100 · weight 25
  • pass
    protocol.modernsupports 2026-07-28 (server/discover)
  • pass
    protocol.statelessanswers without a session
  • pass
    protocol.transportstreamable HTTP
  • pass
    protocol.list_ttltool list is cacheable (ttlMs 3600000)
authorizationn/a · weight 15
  • n/a
    auth.prm, auth.as_metadata, auth.cimdno remote uses OAuth
  • n/a
    auth.secret_in_urlno templated URL
tool hygiene79 · weight 30
  • pass
    tools.descriptionsevery tool has a description
  • warn
    tools.description_length1 tools have descriptions over 1,024 characters, which crowds the context
  • pass
    tools.schemasevery tool has an object input schema
  • pass
    tools.annotations13 of 13 tools declare readOnlyHint or destructiveHint
  • fail
    tools.directory_hintsno tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: payment_decision (destructiveHint); screen_endpoint (destructiveHint); check_payment_request (destructiveHint); …
  • pass
    tools.token_costabout 4,117 tokens to load every tool
  • pass
    tools.api_dumptools are not a one-to-one API dump
stability75 · weight 15
  • warn
    stability.changes17 tool changes in 30 days
  • pass
    stability.rug_pullno tool changed its meaning under the same name
dependenciesn/a · weight 15
  • n/a
    deps.known_vulns, deps.mcp_sdk_version, deps.resolvabledeps.dev does not know [email protected]

13 tools, about 4,117 tokens to load them all · tool set 66281642c23b · tools last changed 2026-10-19 · checked 2026-10-20 05:45 UTC

Tool changes

  • screen_addresschangedinput schema
  • payment_decisionchangedinput schema
  • check_payment_requestadded

    Call this before paying because an email, invoice or chat message asked you to. Pass what you received: raw headers if you have them, the From line, subject and body (or body_html), and the payee address if you already extracted one. OceanAlt checks whether the sender is who it claims to be (SPF/DKIM/DMARC results, a display name that names another domain, Reply-To sent elsewhere), whether the sender domain or any link imitates a brand or is a known phishing host, whether the payee address is listed or differs from previous_pay_to, and whether the text pressures the reader, announces changed payment details, or carries instructions aimed at an AI. Returns allow | review | decline with findings. On decline, do not pay from this message; confirm through a channel you already trust. The text is processed in memory and not stored. Free, no API key.

  • screen_endpointchangedoutput schema
  • screen_addresschangedoutput schema
  • payment_decisionchangedoutput schema
  • payment_decisionchangedinput schema
  • screen_addresschangedinput schema
  • payment_decisionchangeddescription, input schema
    before

    Call this before every payment your agent makes. Free, no signup, no API key. Pass the payee address the agent is about to pay; get a machine-executable decision: allow | review | decline, plus verifiable evidence and retry semantics — use it as a gate: if the decision is not "allow", do not pay. On allow/review it also returns a verifiable compliance attestation you can attach to the settlement so the payment carries proof it passed OceanAlt's decision. Pass resource_url (the URL that returned the 402 quote) and OceanAlt also asks that site for its own payment quote: if the quote names a different payee, or the site cannot be checked, the decision is raised to review. A match only shows the site and the payee agree; it is not an endorsement of the seller. Every decision carries a receipt signed with Ed25519 that you can verify offline with the public key at https://oceanalt.com/.well-known/oceanalt-keys.json. Free, no API key.

    after · 91% of words in common

    Call this before every payment your agent makes. Free, no signup, no API key. To see it work first, call it with {"to":"0xd90e2f925DA726b50C4Ed8D0Fb90Ad053324F31b","network":"ethereum"}: that address is a known mixer, so the answer is decline with the matching list as evidence. Pass the payee address the agent is about to pay; get a machine-executable decision: allow | review | decline, plus verifiable evidence and retry semantics — use it as a gate: if the decision is not "allow", do not pay. On allow/review it also returns a verifiable compliance attestation you can attach to the settlement so the payment carries proof it passed OceanAlt's decision. Pass resource_url (the URL that returned the 402 quote) and OceanAlt also asks that site for its own payment quote: if the quote names a different payee, or the site cannot be checked, the decision is raised to review. A match only shows the site and the payee agree; it is not an endorsement of the seller. Every decision carries a receipt signed with Ed25519 that you can verify offline with the public key at https://oceanalt.com/.well-known/oceanalt-keys.json. Free, no API key.

  • payment_decisionchangeddescription, input schema
    before

    Call this before every payment your agent makes. Free, no signup, no API key. Pass the payee address the agent is about to pay; get a machine-executable decision: allow | review | decline, plus verifiable evidence and retry semantics — use it as a gate: if the decision is not "allow", do not pay. On allow/review it also returns a verifiable compliance attestation you can attach to the settlement so the payment carries proof it passed OceanAlt's decision. Free, no API key.

    after · 59% of words in common

    Call this before every payment your agent makes. Free, no signup, no API key. Pass the payee address the agent is about to pay; get a machine-executable decision: allow | review | decline, plus verifiable evidence and retry semantics — use it as a gate: if the decision is not "allow", do not pay. On allow/review it also returns a verifiable compliance attestation you can attach to the settlement so the payment carries proof it passed OceanAlt's decision. Pass resource_url (the URL that returned the 402 quote) and OceanAlt also asks that site for its own payment quote: if the quote names a different payee, or the site cannot be checked, the decision is raised to review. A match only shows the site and the payee agree; it is not an endorsement of the seller. Every decision carries a receipt signed with Ed25519 that you can verify offline with the public key at https://oceanalt.com/.well-known/oceanalt-keys.json. Free, no API key.

Showing the latest 10. Full history: list_changes · trend: quality JSON.

Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed. How it is computed.

Trust 96 / 100

provenance85
liveness100
freshness100
hygiene100

+repository +dns-namespace +website +reachable +uptime-99% +updated-1d-ago

Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed. How it is computed.

Dependencies

[email protected] npmthis version is not known to the dependency resolver

Dependency graphs from deps.dev; advisories from OSV.dev, including the GitHub Advisory Database and the PyPI Advisory Database; all CC BY 4.0. The graph is what a clean install of this version resolves today; nothing was installed or run. How it is checked.

Endpoints

remoteauthreachableuptime 30dp50protocollast ok
https://oceanalt.com/api/mcp streamable-httpnoneyes99%1421 ms2026-07-28, 2025-06-182026-10-20
packageregistryversionruntimesecrets
oceanalt-aml-mcpnpm0.7.4–

Tools (13)

attest_control_baselineFile your operator's control-baseline attestation — the counterpart to counterparty_control_baseline. That tool asks what controls the OTHER side runs; this one publishes what YOUR side runs, so payers can see it before settling with you. No account, no key, one call. Gaps are allowed and expected: answer false where a control is not in place and describe how you plan to close it in gapPlan. A filing with declared gaps is worth far more than no filing — it lets a payer decide against a known shape instead of a blank. Get the control ids from the baseline list first. Only file for a party you are actually authorised to speak for.
baseline_controlsread-onlyFetch the OceanAlt Agent Control Baseline: the list of controls an agent operator is expected to run before it is allowed to move money, each answerable yes or no. Call this before attest_control_baseline so you file against real control ids. Each control carries which gate enforces it and why it exists.
check_calldata_intentread-onlyAnti blind-signing. EVM: decodes what a transaction's calldata will actually do (ERC-20 transfer/approve/permit, setApprovalForAll, ownership transfer, native transfer). Solana: decodes a whole base64 transaction (SPL Token / Token-2022 Transfer, TransferChecked, Approve, SetAuthority, CloseAccount, Burn; System Transfer / Assign; ATA creation). Compares it with what you believe you are doing. EVM: pass intent:{action:'pay', to, amount} plus contract (the transaction's to) and data (hex calldata). Solana: pass network:'solana' and transaction (base64) instead of data. decision match = does what you declared; mismatch = different recipient/amount/asset, or an approval / authority change instead of a payment — do not sign; unknown = could not decode (including address-lookup-table accounts), which is not the same as safe.
check_payment_requestread-onlyCall this before paying because an email, invoice or chat message asked you to. Pass what you received: raw headers if you have them, the From line, subject and body (or body_html), and the payee address if you already extracted one. OceanAlt checks whether the sender is who it claims to be (SPF/DKIM/DMARC results, a display name that names another domain, Reply-To sent elsewhere), whether the sender domain or any link imitates a brand or is a known phishing host, whether the payee address is listed or differs from previous_pay_to, and whether the text pressures the reader, announces changed payment details, or carries instructions aimed at an AI. Returns allow | review | decline with findings. On decline, do not pay from this message; confirm through a channel you already trust. The text is processed in memory and not stored. Free, no API key.
counterparty_control_baselineread-onlyAnswers a different question from address screening. Screening asks whether an address is risky; this asks how much damage the agent on the other side could do if it were talked into something. Returns that party's self-attestation against the OceanAlt Agent Control Baseline, split into two sets that must NOT be conflated: verified_by_oceanalt (enforced by the gateway on every payment — provable) and self_claimed (what they state about their own side — NOT verified by OceanAlt). Most parties have not attested: found:false means no information, not a bad signal.
evidence_bundleread-onlyEverything OceanAlt holds about an address as public facts, in one Ed25519-signed bundle you can verify offline: screening verdict with evidence and freshness, profile signals, one-hop relations to listed addresses, fulfillment receipt stats and coverage. A witness, not a prosecutor: no conclusions about people. Same as GET https://oceanalt.com/api/evidence/bundle.
payee_decideread-onlyThe receiving side's check before settlement. Given the payee's registry id (sid) and, optionally, the payer, amount and purpose, returns accept / decline / hold_request_info / not_ready with reason codes, the fields to request, evidence and a signature. Rule-based, not a model's opinion. Same logic as POST https://oceanalt.com/api/payee/decide.
payment_decisionread-onlyCall this before every payment your agent makes. Free, no signup, no API key. To see it work first, call it with {"to":"0xd90e2f925DA726b50C4Ed8D0Fb90Ad053324F31b","network":"ethereum"}: that address is a known mixer, so the answer is decline with the matching list as evidence. Pass the payee address the agent is about to pay; get a machine-executable decision: allow | review | decline, plus verifiable evidence and retry semantics — use it as a gate: if the decision is not "allow", do not pay. On allow/review it also returns a verifiable compliance attestation you can attach to the settlement so the payment carries proof it passed OceanAlt's decision. Pass resource_url (the URL that returned the 402 quote) and OceanAlt also asks that site for its own payment quote: if the quote names a different payee, or the site cannot be checked, the decision is raised to review. A match only shows the site and the payee agree; it is not an endorsement of the seller. Every decision carries a receipt signed with Ed25519 that you can verify offline with the public key at https://oceanalt.com/.well-known/oceanalt-keys.json. Free, no API key.
recent_flaggedread-onlyReturn a representative sample of addresses on OceanAlt's reviewed risk list — OFAC-sanctioned, known mixers, and scam/phishing — each with its source category and reason. Takes no arguments. Free, no API key.
resolve_agent_identityread-onlyResolves who stands behind a paying agent: agent -> principal -> mandate -> credential -> wallet. Each link reports whether it holds; completeness counts how many do (a factual count, not a score). Wherever the chain breaks is where accountability stops. Publication is opt-in and only posture is exposed (that a ceiling exists, never its value), so found:false means the agent has not published — absence of information, not a bad signal.
screen_addressread-onlyRun an AML compliance screen on a single blockchain address BEFORE paying or receiving from it — the pre-payment check on a counterparty. Checks OFAC sanctions, known mixers, scam and phishing lists, stablecoin issuer freezes, and on-chain heuristics. Returns a verdict (clear | caution | risky), a 0–100 risk score, a blocked flag, and the matching signals — receipts, not a black-box score. A clear verdict means nothing was found in the data OceanAlt holds; it is not a statement that the address is safe. Depth varies by chain (see coverage.chains at /.well-known/agent-capabilities). Supports EVM (0x…), Tron (T…), Solana (base58). Free, no API key.
screen_endpointread-onlyScreen a payment ENDPOINT (URL or domain) before calling it — the half that address screening cannot answer. In x402 the agent discovers a URL first, receives a 402, and only then learns where to pay: if that endpoint is spoofed, the payee address it hands back is freshly generated and appears on no sanctions list. Checks the hostname and its parent domains against phishing-domain intelligence plus hostname shape signals (bare IP, punycode homograph, deep subdomain nesting, free hosting). Returns clear | caution | risky | unknown with language-independent signal_keys. A clear verdict means no match was found, NOT that the endpoint is safe — freshly registered phishing hosts always precede any list. Use together with screen_address. Free, no API key.
verify_payment_requirementsread-onlyBefore paying an x402 402 response, check that its payment requirements (payTo, amount, asset, network, resource) were signed by the seller and not altered in transit by a proxy, CDN, SDK or another tool. x402 v2 carries the requirements in the PAYMENT-REQUIRED response header (base64 JSON): pass either the decoded JSON or the raw base64 value as body. Optionally pass expect:{payTo, amount} — the address and amount you are about to pay — and the tool also checks they match what was signed. verified:false with reason_code no_signature means the seller does not sign (unprotected, not necessarily malicious); digest_mismatch or signature_invalid means the response was tampered with — do not pay.

Schemas: list_tools.

Similar MCP servers

Official server.json
{
  "name": "com.oceanalt/aml",
  "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
  "remotes": [
    {
      "url": "https://oceanalt.com/api/mcp",
      "type": "streamable-http"
    }
  ],
  "version": "0.7.4",
  "packages": [
    {
      "version": "0.7.4",
      "transport": {
        "type": "stdio"
      },
      "identifier": "oceanalt-aml-mcp",
      "registryType": "npm"
    }
  ],
  "repository": {
    "url": "https://github.com/OceanAlt666/oceanalt-aml-mcp",
    "source": "github"
  },
  "websiteUrl": "https://oceanalt.com/en/api-docs",
  "description": "Pre-payment checks for AI agents: sanctions and AML screening of payees, payment pages and requests."
}