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...
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.
npm i -g @metacomp/visionx-kyt-mcp