oceanalt-aml-mcp 0.7.3 → 0.7.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -2
- package/package.json +1 -1
- package/server.mjs +35 -2
package/README.md
CHANGED
|
@@ -19,6 +19,7 @@ Built for [agentic payments](https://oceanalt.com/en/rap): ask *"should this pay
|
|
|
19
19
|
| `verify_payment_requirements` | `payment_required` (decoded 402 JSON or raw base64), `expect?` | Was this x402 402 response tampered with in transit? Ed25519 check of the seller's signed requirements → ok / digest_mismatch / … | Free |
|
|
20
20
|
| `evidence_bundle` | `address`, `network?` | One signed bundle of everything public OceanAlt can say about an address (screening + evidence + freshness, profile signals, one-hop relations, receipt stats); witness, not plaintiff | Free |
|
|
21
21
|
| `screen_endpoint` | `url` | Is this payment URL or domain on a phishing list, or shaped like one? The half address screening cannot answer | Free |
|
|
22
|
+
| `check_payment_request` | `from`, `headers`, `body`, `pay_to` … | An email, invoice or message asks you to pay: is the sender spoofed, are the links phishing, is the payee listed or changed, is there pressure or an instruction aimed at an AI? | Free |
|
|
22
23
|
| `baseline_controls` | — | The Agent Control Baseline: controls an operator should run before its agent moves money | Free |
|
|
23
24
|
| `attest_control_baseline` | `entity`, `answers`, `gapPlan?` | File your own side's control-baseline attestation so payers can look it up | Free |
|
|
24
25
|
| `payee_decide` | `payee` (registry id), `payer?`, `amountUsdc?`, `purpose?` | The receiving side's check before settlement: accept / decline / hold_request_info / not_ready, with reason codes, the fields to request, evidence and a signature | Free |
|
|
@@ -102,9 +103,9 @@ MIT © OceanAlt
|
|
|
102
103
|
|
|
103
104
|
## 中文
|
|
104
105
|
|
|
105
|
-
让 **Claude / Cursor / 任意 MCP 客户端**原生调用 OceanAlt 的链上地址合规筛查 + 合规网关。给收据,不给黑箱分:每条判决都带**可点开核验的证据**。覆盖
|
|
106
|
+
让 **Claude / Cursor / 任意 MCP 客户端**原生调用 OceanAlt 的链上地址合规筛查 + 合规网关。给收据,不给黑箱分:每条判决都带**可点开核验的证据**。覆盖 8 条 EVM 链 + 波场 TRON + Solana,付款前先问一句「这个收款方安不安全」。
|
|
106
107
|
|
|
107
|
-
- **免费工具**:`payment_decision`(付款前调一次 → allow/review/decline + 证据 + 可核验结算凭证)、`screen_address`(单查 + 证据)、`payee_decide`(收款方三态决策)、`counterparty_control_baseline` / `resolve_agent_identity`(对方的控制基线与责任链)、`recent_flagged`(近期被标记)、`check_calldata_intent`(盲签检查,EVM calldata 或整笔 Solana 交易)、`screen_endpoint`(付款网址是否钓鱼)、`baseline_controls` / `attest_control_baseline`(控制基线清单与自证)、`verify_payment_requirements`(402 应答验签)、`evidence_bundle`(签名证据包)。无需 key、无需注册。
|
|
108
|
+
- **免费工具**:`payment_decision`(付款前调一次 → allow/review/decline + 证据 + 可核验结算凭证)、`screen_address`(单查 + 证据)、`payee_decide`(收款方三态决策)、`counterparty_control_baseline` / `resolve_agent_identity`(对方的控制基线与责任链)、`recent_flagged`(近期被标记)、`check_calldata_intent`(盲签检查,EVM calldata 或整笔 Solana 交易)、`screen_endpoint`(付款网址是否钓鱼)、`check_payment_request`(收到让你付钱的邮件、发票或消息时,查发件人真假、钓鱼链接、收款地址、催付话术和写给 AI 的指令)、`baseline_controls` / `attest_control_baseline`(控制基线清单与自证)、`verify_payment_requirements`(402 应答验签)、`evidence_bundle`(签名证据包)。无需 key、无需注册。
|
|
108
109
|
- **付费三工具(x402)**:`compliance_decision`(网关判决)、`deep_trace`(波场深度追踪)、`batch_screen`(批量)。按需加载 `@x402`+`viem`,设置 `OCEANALT_PAYER_KEY` 才启用。价格:判决 $0.002、追踪 $0.01、批量 $0.01。也可以设置 `OCEANALT_CREDIT_TOKEN`(充值包 $0.10 = 100 次判决,在 `POST https://oceanalt.com/api/x402/credits` 购买),`compliance_decision` 每次扣 1 次,不再逐笔签名。
|
|
109
110
|
- **⚠️ 真钱**:付费端点**当前在 Base 主网结算,USDC 为真实资金**(`eip155:8453`),上表 `$` 价按真实 USDC 收取。付款前务必以实时清单 <https://oceanalt.com/api/x402> 为准,并使用**小额专用付款钱包**。
|
|
110
111
|
- **🔐 钱包安全**:`OCEANALT_PAYER_KEY` 只在本地签一次 EIP-3009 授权,**绝不随包发布/上传/打日志**;facilitator 代付 gas、不托管资金。**建议用小额专用钱包**,别用主资金钱包私钥。
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "oceanalt-aml-mcp",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.4",
|
|
4
4
|
"mcpName": "com.oceanalt/aml",
|
|
5
5
|
"description": "Should this payment go to this address? MCP server for pre-settlement payment compliance: screen a payee address for OFAC sanctions, mixers, scam and hack lists and on-chain risk across 7 EVM chains, Tron and Solana — with click-through evidence, not a black-box score. Free tools need no API key. Paid x402 tools add gateway verdicts, taint tracing and batch screening.",
|
|
6
6
|
"type": "module",
|
package/server.mjs
CHANGED
|
@@ -55,7 +55,9 @@ const PKG_VERSION = (() => {
|
|
|
55
55
|
try { return JSON.parse(readFileSync(new URL("./package.json", import.meta.url), "utf8")).version; }
|
|
56
56
|
catch { return "0.0.0-unknown"; }
|
|
57
57
|
})();
|
|
58
|
-
|
|
58
|
+
// 2026-10-19: many clients connect and never call a tool. Tell them the first step at initialize (same wording as the remote /api/mcp).
|
|
59
|
+
const INSTRUCTIONS = "OceanAlt: pre-payment checks for agents. Start here: before every payment, call payment_decision (free, no key) with the payee address (to) and network; if the answer is not allow, do not pay. Try it with {\"to\":\"0xd90e2f925DA726b50C4Ed8D0Fb90Ad053324F31b\",\"network\":\"ethereum\"}, a known mixer, which returns decline. Then, as needed: screen_endpoint on the payment page URL, check_payment_request when an email, invoice or message asks you to pay, screen_address for a raw verdict. compliance_decision, deep_trace and batch_screen are paid versions (x402, real USDC); you do not need them to get started.";
|
|
60
|
+
const server = new McpServer({ name: "oceanalt-aml", version: PKG_VERSION }, { instructions: INSTRUCTIONS });
|
|
59
61
|
|
|
60
62
|
server.registerTool(
|
|
61
63
|
"screen_address",
|
|
@@ -354,6 +356,37 @@ server.registerTool(
|
|
|
354
356
|
}
|
|
355
357
|
);
|
|
356
358
|
|
|
359
|
+
server.registerTool(
|
|
360
|
+
"check_payment_request",
|
|
361
|
+
{
|
|
362
|
+
title: "Check an email, invoice or message that asks you to pay (free)",
|
|
363
|
+
description:
|
|
364
|
+
"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 spoofed (SPF/DKIM/DMARC, a display name naming another domain, Reply-To sent elsewhere), whether the sender domain or links imitate a brand or are known phishing hosts, whether the payee 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. The text is processed in memory and not stored. Free, no API key.",
|
|
365
|
+
inputSchema: {
|
|
366
|
+
headers: z.string().optional().describe("Raw email headers, if available (needed for SPF/DKIM/DMARC)"),
|
|
367
|
+
from: z.string().optional().describe('The From line, e.g. "Acme Billing" <billing@acme.com>'),
|
|
368
|
+
reply_to: z.string().optional().describe("The Reply-To line, if any"),
|
|
369
|
+
subject: z.string().optional(),
|
|
370
|
+
body: z.string().optional().describe("Plain-text body, invoice text or chat message"),
|
|
371
|
+
body_html: z.string().optional().describe("HTML body, if available"),
|
|
372
|
+
pay_to: z.string().optional().describe("The payee address the message asks you to pay"),
|
|
373
|
+
network: z.string().optional().describe("Network of pay_to, e.g. base, ethereum, tron, solana"),
|
|
374
|
+
previous_pay_to: z.string().optional().describe("The address you paid this requester last time"),
|
|
375
|
+
expected_sender_domain: z.string().optional().describe("The domain this requester normally sends from"),
|
|
376
|
+
},
|
|
377
|
+
annotations: { title: "Check a payment request (free)", readOnlyHint: true, idempotentHint: true, openWorldHint: true },
|
|
378
|
+
},
|
|
379
|
+
async (args) => {
|
|
380
|
+
const r = await apiPost("/api/payment-request", args);
|
|
381
|
+
const text = [
|
|
382
|
+
`Decision: ${r.decision} | reason_code: ${r.reason_code || "?"}`,
|
|
383
|
+
r.findings?.length ? `Findings:\n- ${r.findings.map((f) => `[${f.level}] ${f.message}`).join("\n- ")}` : "Findings: none",
|
|
384
|
+
r.advice || "",
|
|
385
|
+
].filter(Boolean).join("\n");
|
|
386
|
+
return { content: [{ type: "text", text }], structuredContent: r };
|
|
387
|
+
}
|
|
388
|
+
);
|
|
389
|
+
|
|
357
390
|
server.registerTool(
|
|
358
391
|
"baseline_controls",
|
|
359
392
|
{
|
|
@@ -463,7 +496,7 @@ server.registerTool(
|
|
|
463
496
|
{
|
|
464
497
|
title: "Gateway compliance decision for a payment (paid, x402 $0.002 or 1 credit)",
|
|
465
498
|
description:
|
|
466
|
-
"Run OceanAlt's full compliance gateway on a proposed payment and get a DECISION — allow | review | decline — plus advice and verifiable evidence, not just raw data. Combines AML screening of the payee with RAP (Responsible Agentic Payments) gate checks. Use this when an agent needs a go/no-go call before releasing funds. PAID via x402: the first request returns HTTP 402, this server automatically signs one USDC authorization and retries — this moves REAL money and requires OCEANALT_PAYER_KEY. Costs $0.002 in real USDC settled on Base mainnet (eip155:8453). Alternatively set OCEANALT_CREDIT_TOKEN (a credit pack bought at POST https://oceanalt.com/api/x402/credits: $0.10 for 100 decisions); each call then uses one credit and no payment is signed. Always confirm the live network/price at https://oceanalt.com/api/x402 and use a dedicated low-balance payer wallet.",
|
|
499
|
+
"Paid version of payment_decision. Start with the free payment_decision tool; switch to this one when you need the full evidence detail and a settled per-call receipt (x402), for example in an audited payment flow. Run OceanAlt's full compliance gateway on a proposed payment and get a DECISION — allow | review | decline — plus advice and verifiable evidence, not just raw data. Combines AML screening of the payee with RAP (Responsible Agentic Payments) gate checks. Use this when an agent needs a go/no-go call before releasing funds. PAID via x402: the first request returns HTTP 402, this server automatically signs one USDC authorization and retries — this moves REAL money and requires OCEANALT_PAYER_KEY. Costs $0.002 in real USDC settled on Base mainnet (eip155:8453). Alternatively set OCEANALT_CREDIT_TOKEN (a credit pack bought at POST https://oceanalt.com/api/x402/credits: $0.10 for 100 decisions); each call then uses one credit and no payment is signed. Always confirm the live network/price at https://oceanalt.com/api/x402 and use a dedicated low-balance payer wallet.",
|
|
467
500
|
inputSchema: {
|
|
468
501
|
to: z.string().describe("Payee address the agent intends to pay. EVM (0x + 40 hex) or Tron (T + 33 base58)."),
|
|
469
502
|
amountUsdc: z.number().optional().describe("Payment amount in USDC. Optional; used only for record / mandate-limit checks, not required to get a decision."),
|