Install
openclaw skills install metacomp-visionx-kytCheck Web3 wallet or transaction security using MetaComp VisionX. Trigger when user mentions wallet address (0x..., Bitcoin, Tron), transaction hash, or asks about Web3 security, risk, scam, or suspicious activity. When triggered, read the full SKILL.md file at the skill location before calling any tool or writing any response.
openclaw skills install metacomp-visionx-kyt☐ 1. Probe server: get_wallet_security(network:"Ethereum", walletAddress:"0x000...0")
→ Error or 401 → Show Setup Guide, STOP
→ Success → continue
☐ 2. All required fields collected?
Wallet: network + walletAddress
Transaction: network + hash + asset + from + to + direction
Transaction: ALWAYS ask "Are you the sender or the recipient?" — never infer
⛔ After asking, STOP. Do not call any tool, do not output any report.
Wait for the user's answer before doing anything else.
① Analysis Preface — > blockquote with 🔬 (see Transaction Report spec below)
② Transaction Security Report — info table + Risk Sources table + Comprehensive Summary
① Analysis Preface — > blockquote with 🔬
⛔ SKIP entirely if get_transaction_security was called in this response (counterparty wallet case).
Skip the blockquote preface only — do NOT skip the Wallet Security Report heading in Step ②. Go straight to Step ②.
② Wallet Security Report — 4 sub-sections (Basic Info / Transaction Timeline / Risk Exposure Breakdown / High Risk Categories)
③ Cross-Vendor Risk Comparison — 4 markdown tables (Direct Incoming / Direct Outgoing / Indirect Incoming / Indirect Outgoing)
④ Comprehensive Summary — 4–6 sentences
⑤ Exposure Detail Tables — 4 markdown tables (all entries, high and low risk)
⑥ Risk Verdict — prominent markdown block with risk level + recommendation
Render as a > blockquote opening with 🔬. Write fresh each time in the user's language.
Three separate paragraphs — do NOT merge them.
Paragraph 1 — Data Sources Name all six vendors: Chainalysis, Elliptic, TRM, Merkle Science, Beosin, and SlowMist. Explain cross-verification eliminates individual blind spots. (1–2 sentences)
Paragraph 2 — Methodology Describe the two-layer analysis: Layer 1 checks direct contact with flagged addresses; Layer 2 traces all fund flows forward and backward through unlimited on-chain hops, calculating taint ratios at each hop depth. ⛔ Do NOT use the word "threshold" or mention specific threshold values. Adapt framing: high risk → emphasize both layers triggered; low risk → explain both layers returned clean; Tron → mention ~10× higher sanctions exposure than Ethereum.
Paragraph 3 — Research Basis Cite at least one figure from: MetaComp Research, "Relative Effectiveness of On-Chain AML/CFT Know-Your-Transaction (KYT) Tools" (July 2025), 7,000 sampled transactions. Key findings (pick most relevant):
If data.extra.selectedTx is null or empty:
Show: "Transaction details were not returned. Overall risk level: data.level."
For each entry in data.extra.selectedTx:
Transaction: txHash (first 10 + last 4 chars)
| Field | Detail |
|---|---|
| Date | date |
| Direction | direction (received / sent) |
| Asset | asset.asset |
| Amount | asset.amount |
| USD Value | $asset.usdValue USD |
| From | fromAddress |
| To | toAddress |
| Risk Level | 🟢 Low / 🟡 Medium / 🟠 Medium-High / 🔴 High / 🔴 Severe (treat as High) — from txRiskLevel |
| Direct Exposure | Yes / No |
⚠️ Risk Sources
| Risk Type | Ratio | Interpretation |
|---|---|---|
source | ratio | < 5%: low/residual · 5–20%: moderate · > 20%: significant |
For each risk source, add one sentence on practical implications.
If riskSources empty: "✅ No risk sources identified."
📋 Comprehensive Summary (4–5 sentences) ⛔ Do NOT name any specific vendor. Use "multiple vendors", "cross-vendor consensus", etc.
Error Handling
data.success === false or code !== 0 → check failed; suggest retry or metacomp.ai supportBefore writing anything — answer this question:
Was get_transaction_security called earlier in this response?
Render as a > blockquote opening with 🔬. Write fresh in the user's language.
Two separate paragraphs — do NOT merge them. Do NOT include methodology (Layer 1/Layer 2/taint) — that is transaction-report only.
Paragraph 1 — Data Sources Name all six vendors: Chainalysis, Elliptic, TRM, Merkle Science, Beosin, and SlowMist. Explain cross-verification eliminates individual blind spots. (1–2 sentences)
Paragraph 2 — Research Basis Cite at least one figure from: MetaComp Research, "Relative Effectiveness of On-Chain AML/CFT Know-Your-Transaction (KYT) Tools" (July 2025). Key findings (pick most relevant):
Tone: Low risk → explain why clean rating is trustworthy; Tron → reference risk ratio; High risk → reference multi-vendor parallel scanning.
If this is a counterparty wallet, prepend the heading: 🔎 Counterparty Wallet Analysis
Otherwise use: 🔐 Wallet Security Report — MetaComp VisionX
| Field | Detail |
|---|---|
| Address | data.address |
| Network | data.network |
| Overall Risk Level | 🟢 Low / 🟡 Medium / 🟠 Medium-High / 🔴 High — from data.level. Map "Severe" → 🔴 High. Any other unrecognized level → display raw value with 🔴 |
| Field | Detail |
|---|---|
| Earliest Transaction | data.extra.earliestTransactionTime |
| Latest Transaction | data.extra.latestTransactionTime |
| Total Incoming | $data.extra.totalIncoming USD |
| Total Outgoing | $data.extra.totalOutgoing USD |
Briefly comment on activity span and volume (long-standing vs newly created, notable volume?).
| Direction | Total | Low Risk | High Risk | High Risk % |
|---|---|---|---|---|
| Incoming | $incomingRiskExposureBreakdown.totalAmount | $...lowRiskAmount | $...highRiskAmount | highRisk/total×100% |
| Outgoing | $outgoingRiskExposureBreakdown.totalAmount | $...lowRiskAmount | $...highRiskAmount | highRisk/total×100% |
List all items in data.extra.highRiskCategories separated by ·
Example: Sanctions · Theft · Malware
For each category present, add one sentence:
If list empty: "✅ No high-risk categories detected."
For any category NOT in the list above, describe it based on its name and add one general sentence about its risk implications.
Render 4 markdown tables. All table headers MUST use Vendor 1 / Vendor 2 / Vendor 3 — never actual vendor names.
How to build each table:
tagTypeVerbose values across the three vendors for that direction → rowsisHighRisk == true → ⚠️ HighisHighRisk == false → ✅ Low[] → —[], ALL cells for that vendor MUST show —. Never infer or populate any cell from an empty array.— No data from any vendor —Data mapping:
| Table | Title | Vendor 1 | Vendor 2 | Vendor 3 |
|---|---|---|---|---|
| 1 | 📥 Direct Incoming | data.extra.beosin.directIncoming | data.extra.elliptic.directIncoming | data.extra.merklescience.directIncoming |
| 2 | 📤 Direct Outgoing | data.extra.beosin.directOutgoing | data.extra.elliptic.directOutgoing | data.extra.merklescience.directOutgoing |
| 3 | 📥 Indirect Incoming | data.extra.beosin.indirectIncoming | data.extra.elliptic.indirectIncoming | data.extra.merklescience.indirectIncoming |
| 4 | 📤 Indirect Outgoing | data.extra.beosin.indirectOutgoing | data.extra.elliptic.indirectOutgoing | data.extra.merklescience.indirectOutgoing |
Table format:
🔍 Cross-Vendor Risk Comparison
📥 Direct Incoming — Cross-Vendor Risk Flags
| Category | Vendor 1 | Vendor 2 | Vendor 3 |
|---|---|---|---|
| {tagTypeVerbose} | ⚠️ High / ✅ Low / — | ⚠️ High / ✅ Low / — | ⚠️ High / ✅ Low / — |
(repeat for tables 2–4 with appropriate titles and data)
⛔ Do NOT name any specific vendor. Replace with: "multiple vendors", "cross-vendor consensus", "all vendors", etc.
Render 4 markdown tables. Include every entry — never skip $0 rows. ❌ No HTML — plain text and emoji only.
📥 Direct Incoming Exposure (data.extra.directIncoming)
| Category | Amount (USD) | Ratio | Risk |
|---|---|---|---|
tagTypeVerbose | ≈ $totalValueUsd | ratio > 0 ? ratio% : "< 0.01%" | ⚠️ High Risk / ✅ Low Risk |
If empty: — No direct incoming exposure recorded —
📥 Indirect Incoming Exposure (data.extra.indirectIncoming)
| Category | Amount (USD) | Ratio | Risk |
|---|---|---|---|
tagTypeVerbose | ≈ $totalValueUsd | ratio > 0 ? ratio% : "< 0.01%" | ⚠️ High Risk / ✅ Low Risk |
If empty: — No indirect incoming exposure recorded —
📤 Direct Outgoing Exposure (data.extra.directOutgoing)
| Category | Amount (USD) | Ratio | Risk |
|---|---|---|---|
tagTypeVerbose | ≈ $totalValueUsd | ratio > 0 ? ratio% : "< 0.01%" | ⚠️ High Risk / ✅ Low Risk |
If empty: — No direct outgoing exposure recorded —
📤 Indirect Outgoing Exposure (data.extra.indirectOutgoing)
| Category | Amount (USD) | Ratio | Risk |
|---|---|---|---|
tagTypeVerbose | ≈ $totalValueUsd | ratio > 0 ? ratio% : "< 0.01%" | ⚠️ High Risk / ✅ Low Risk |
If empty: — No indirect outgoing exposure recorded —
For any ⚠️ High Risk row, add one sentence explaining that category's implications. If any indirect exposure exists, briefly explain the difference between direct and indirect exposure.
Render a prominent verdict block using the format below. This is the last element of every wallet report.
Color mapping:
🚨 High Risk⚠️ Medium-High Risk⚠️ Medium Risk✅ Low Risk---
🚨 Risk Verdict — [risk level label]
[1–2 sentence verdict summarizing the most important finding]
⚡ Recommendation: [freely interact / proceed with caution / avoid / report]
---
Transaction:
☐ Analysis Preface: 3 paragraphs (Vendors / Methodology / Research)?
☐ Transaction Security Report: info table + Risk Sources + Comprehensive Summary?
Wallet:
☐ Analysis Preface output? [skip if counterparty]
☐ Wallet Security Report — all 4 sub-sections:
Basic Info table?
Transaction Timeline table + activity comment?
Risk Exposure Breakdown table?
High Risk Categories (text labels + one sentence each)?
☐ Cross-Vendor Risk Comparison: 4 markdown tables?
☐ Comprehensive Summary: 4–6 sentences?
☐ Exposure Detail Tables: 4 markdown tables?
☐ Risk Verdict block (last element)?
Any unchecked item → render it now before ending the response.
get_wallet_security{ "network": "Bitcoin|Ethereum|Tron", "walletAddress": "0x..." }
get_transaction_security{
"network": "Bitcoin|Ethereum|Tron",
"transactionDetails": [{
"hash": "0x...", "asset": "USDT",
"direction": "received|sent",
"from": "0x...", "to": "0x..."
}]
}
Wallet only → get_wallet_security only.
Transaction → call BOTH in parallel, present Transaction Report first:
get_transaction_securityget_wallet_security on the counterparty wallet| User role | Wallet to check |
|---|---|
| Recipient | from address (sender's wallet) |
| Sender | to address (recipient's wallet) |
No MCP server configured → complete the steps below.
{
"mcp": {
"servers": {
"metacomp-security": {
"command": "npx",
"args": ["-y", "--package", "@metacomp/visionx-kyt-mcp", "visionx-kyt-mcp", "--token", "YOUR_API_KEY"]
}
}
},
"skills": {
"entries": {
"metacomp_visionx_kyt": {
"enabled": true
}
}
}
}
Download SKILL.md from github.com/metacomp-ai/remote-mcp, then:
mkdir -p ~/.openclaw/workspace/skills/metacomp_visionx_kyt
cp /path/to/SKILL.md ~/.openclaw/workspace/skills/metacomp_visionx_kyt/SKILL.md
No API key? Apply at metacomp.ai
401 after configuring? Re-apply for a new key at metacomp.ai.