diff --git a/showcase/palisade/README.md b/showcase/palisade/README.md new file mode 100644 index 0000000..f79bd9f --- /dev/null +++ b/showcase/palisade/README.md @@ -0,0 +1,58 @@ +# PaliSade + +Keyless, read-only onchain security scanner for **Robinhood Chain** (primary), +exposed as an **MCP server** any agent can call over HTTP before it signs an +approval, swaps, or invests. EVM majors (Ethereum, Polygon, Arbitrum) and +Solana are also supported for cross-chain checks. + +- **Live API:** https://mcp.palisadescan.com +- **Website:** https://palisadescan.com +- **Source:** https://github.com/palisadescan/palisade + +## What it does + +Eighteen read-only inspectors interrogate a token or wallet, then a consensus +pass weighs six independent signals so one noisy source can't escalate risk on +its own. + +| # | Tool | What it checks | +| --- | --- | --- | +| 1 | `palisade_scan_approvals` | ERC-20/721 allowances, flags unlimited spenders | +| 2 | `palisade_scan_token` | Rugpull indicators: hidden mint, proxy, tax, blacklist | +| 3 | `palisade_detect_honeypot` | Simulated buy/sell to catch tokens you can't exit | +| 4 | `palisade_safety_score` | 0-100 composite: code, ownership, liquidity, holders | +| 5 | `palisade_wallet_report` | Full wallet security posture | +| 6 | `palisade_monitor_wallet` | Alerts on new approvals, risky interactions | +| 7 | `palisade_token_market` | Price, liquidity, volume, pool age (DexScreener) | +| 8 | `palisade_deployer_check` | Deployer history + verification (Blockscout) | +| 9 | `palisade_batch_scan` | Score many tokens in one call, ranked by risk | +| 10 | `palisade_check_scam` | Community scam-report database | +| 11 | `palisade_sentinel_status` | Autonomous Sentinel watchlist + loop config | +| 12 | `palisade_consensus` | Six-source weighted verdict (false-positive guard) | +| 13 | `palisade_liquidity_lock` | Locked / burned / unlocked / unknown | +| 14 | `palisade_simulate_approval` | Simulate an approval before signing | +| 15 | `palisade_detect_clone` | Bytecode fingerprint vs scam DB | +| 16 | `palisade_check_tax` | Buy/sell tax mechanics | +| 17 | `palisade_check_ownership` | Ownership renounced / retained | +| 18 | `palisade_holder_concentration` | Whale grip on sellable float | + +## Boundaries + +- **Read-only by design.** Never signs, holds keys, or moves funds. +- **Keyless and free.** No API key, no account, no payment. +- **Unknown over safe.** Missing data resolves to `unknown`, never `safe`. + +## Quick call + +```bash +curl -s -X POST https://mcp.palisadescan.com/tools/call \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc":"2.0","id":1,"method":"tools/call", + "params":{"name":"palisade_safety_score", + "arguments":{"contract":"0xTokenAddressHere","chain":"robinhood"}}}' +``` + +See [`examples/live-endpoint-proof.md`](examples/live-endpoint-proof.md) for +real, reproducible responses, and +[`skills/palisade-security-scan`](skills/palisade-security-scan) for the +reusable scan skill. diff --git a/showcase/palisade/assets/poster.png b/showcase/palisade/assets/poster.png new file mode 100644 index 0000000..85c1ad0 Binary files /dev/null and b/showcase/palisade/assets/poster.png differ diff --git a/showcase/palisade/examples/live-endpoint-proof.md b/showcase/palisade/examples/live-endpoint-proof.md new file mode 100644 index 0000000..f4402e2 --- /dev/null +++ b/showcase/palisade/examples/live-endpoint-proof.md @@ -0,0 +1,158 @@ +# Live Endpoint Proof + +All responses below are **real, reproducible** calls against the public PaliSade +MCP API at `https://mcp.palisadescan.com`. No API key, no account, no payment — +every call is keyless and read-only. Captured 2026-07-29. + +Reproduce any call by pasting the `curl` block into a terminal. + +--- + +## 1. Service health + +```bash +curl -s https://mcp.palisadescan.com/health +``` + +```json +{"status":"ok","service":"palisade-mcp","tools":18} +``` + +--- + +## 2. Tool inventory (18 read-only tools) + +```bash +curl -s https://mcp.palisadescan.com/tools/list \ + | python3 -c "import sys,json;t=json.load(sys.stdin)['result']['tools'];print(len(t));[print(x['name']) for x in t]" +``` + +``` +18 +palisade_scan_approvals +palisade_scan_token +palisade_detect_honeypot +palisade_safety_score +palisade_wallet_report +palisade_monitor_wallet +palisade_token_market +palisade_deployer_check +palisade_batch_scan +palisade_check_scam +palisade_sentinel_status +palisade_consensus +palisade_liquidity_lock +palisade_simulate_approval +palisade_detect_clone +palisade_check_tax +palisade_check_ownership +palisade_holder_concentration +``` + +--- + +## 3. Safety score — WETH (known-good blue-chip) + +```bash +curl -s -X POST https://mcp.palisadescan.com/tools/call \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc":"2.0","id":1,"method":"tools/call", + "params":{"name":"palisade_safety_score", + "arguments":{"contract":"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2","chain":"ethereum"}}}' +``` + +```json +{ + "address": "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", + "chain": "ethereum", + "score": 92, + "risk_level": "safe", + "breakdown": [ + {"category": "Verified Registry", "score": 92, "note": "Wrapped Ether (WETH) — Canonical WETH"} + ], + "risk_factors": [], + "positive_factors": ["Listed in PALISADE verified registry as Wrapped Ether"], + "recommendation": "Score: 92/100 — Wrapped Ether is a known, verified contract. Risk level: safe." +} +``` + +--- + +## 4. Honeypot probe — WETH + +```bash +curl -s -X POST https://mcp.palisadescan.com/tools/call \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc":"2.0","id":2,"method":"tools/call", + "params":{"name":"palisade_detect_honeypot", + "arguments":{"contract":"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2","chain":"ethereum"}}}' +``` + +```json +{ + "token": "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", + "chain": "ethereum", + "token_name": "Wrapped Ether", + "token_symbol": "WETH", + "is_honeypot": false, + "can_buy": true, + "can_sell": true, + "buy_tax": 0.0, + "sell_tax": 0.0, + "block_reason": null, + "simulations": [ + {"action": "known_contract_lookup", "success": true, "gas_used": null, + "error": "Wrapped Ether (WETH) is a verified blue-chip contract"} + ], + "high_tax_warning": false +} +``` + +--- + +## 5. Six-source consensus — WETH + +The consensus tool weighs six independent signals. Risk only escalates when +multiple sources concur — a built-in false-positive guard. Note the +`liquidity_lock` source returns `unknown` (not `safe`) when a lock cannot be +determined. + +```bash +curl -s -X POST https://mcp.palisadescan.com/tools/call \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc":"2.0","id":3,"method":"tools/call", + "params":{"name":"palisade_consensus", + "arguments":{"contract":"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2","chain":"ethereum"}}}' +``` + +```json +{ + "token": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", + "chain": "ethereum", + "verdict": "safe", + "confidence": 1.0, + "risk_sources": 0, + "safe_sources": 5, + "unknown_sources": 1, + "total_sources": 6, + "votes": [ + {"source": "goplus", "vote": "safe", "weight": 1.0, "reasons": ["no honeypot/tax flags"]}, + {"source": "onchain_score", "vote": "safe", "weight": 0.8, "reasons": ["score 92/100 (safe)"]}, + {"source": "market", "vote": "safe", "weight": 0.6, "reasons": ["liquidity risk: low"]}, + {"source": "deployer", "vote": "safe", "weight": 0.5, "reasons": ["verified registry contract"]}, + {"source": "scam_db", "vote": "safe", "weight": 0.4, "reasons": ["no community reports"]}, + {"source": "liquidity_lock", "vote": "unknown", "weight": 0.0, "reasons": ["lock undetermined"]} + ], + "summary": "5/5 sources agree: no risk signals detected." +} +``` + +--- + +## What this proves + +- The public API is **live** and answers real tool calls over HTTPS with no key. +- Scans return **structured, inspectable verdicts** — not opaque scores. +- The design is **conservative**: an undetermined liquidity lock votes `unknown` + and contributes zero weight rather than inflating a `safe` verdict. +- All 18 tools are registered and reachable (`/tools/list`). diff --git a/showcase/palisade/showcase.json b/showcase/palisade/showcase.json new file mode 100644 index 0000000..f5c35a2 --- /dev/null +++ b/showcase/palisade/showcase.json @@ -0,0 +1,70 @@ +{ + "slug": "palisade", + "title": "PaliSade", + "tagline": "Scans any token or wallet on Robinhood Chain and returns a 0-100 Trust Score fusing honeypot, tax, liquidity-lock, holder-concentration, and a six-source consensus verdict", + "description": "PaliSade is a keyless, read-only onchain security scanner exposed as an MCP server that any agent can call over HTTP before it signs an approval, swaps, or invests. Eighteen inspectors interrogate a token or wallet — approvals, honeypot simulation, tax, ownership, liquidity lock, deployer history, holder concentration, clone detection, scam DB — and a consensus pass weighs six independent signals so a single noisy source never escalates risk on its own. It never requests a signature, holds keys, or moves funds; missing data resolves to unknown, never safe. The package ships reproducible live-endpoint proof against the public API and a reusable scan skill.", + "status": "live", + "topic": "security", + "topics": [ + "security", + "defi", + "rugpull", + "honeypot", + "robinhood", + "mcp" + ], + "builder": { + "name": "palisadescan", + "url": "https://palisadescan.com" + }, + "links": { + "repo": "https://github.com/palisadescan/palisade", + "demo": "https://mcp.palisadescan.com/health", + "share": "https://palisadescan.com", + "feedback": "https://github.com/palisadescan/palisade/issues/new?title=Feedback%3A%20PaliSade&body=Which%20feedback%20prompt%20fits%3F%0A%0A-%20Are%20the%20right%20risk%20signals%20covered%3F%0A-%20Is%20unknown-over-safe%20the%20right%20default%3F%0A-%20What%20proof%20would%20make%20a%20verdict%20trustworthy%3F%0A%0ANotes%3A%0A" + }, + "primitives": [ + "acp" + ], + "visual": { + "kind": "live API security scan", + "eyebrow": "robinhood chain + mcp + read-only", + "title": "trust score for tokens and wallets", + "posterUrl": "https://raw.githubusercontent.com/Virtual-Protocol/acp-cli-demos/main/showcase/palisade/assets/poster.png" + }, + "skills": [ + { + "name": "palisade-security-scan", + "href": "https://github.com/Virtual-Protocol/acp-cli-demos/tree/main/showcase/palisade/skills/palisade-security-scan", + "sourcePath": "showcase/palisade/skills/palisade-security-scan", + "summary": "Scan a token or wallet with the live PaliSade MCP API — validate the 0x target, then call safety_score, honeypot, liquidity_lock, holder_concentration, and consensus over HTTP and interpret the fused verdict. Keyless, read-only, no signing.", + "install": "cp -R showcase/palisade/skills/palisade-security-scan ~/.agents/skills/\ncp -R showcase/palisade/skills/palisade-security-scan ~/.claude/skills/" + } + ], + "artifacts": [ + { + "label": "Live endpoint proof — real scans on the public API (safety score, honeypot, six-source consensus)", + "href": "https://github.com/Virtual-Protocol/acp-cli-demos/blob/main/showcase/palisade/examples/live-endpoint-proof.md", + "kind": "proof" + }, + { + "label": "Reusable skill — palisade-security-scan", + "href": "https://github.com/Virtual-Protocol/acp-cli-demos/tree/main/showcase/palisade/skills/palisade-security-scan", + "kind": "skill" + }, + { + "label": "PaliSade package README", + "href": "https://github.com/Virtual-Protocol/acp-cli-demos/blob/main/showcase/palisade/README.md", + "kind": "docs" + } + ], + "soul": { + "href": "https://github.com/Virtual-Protocol/acp-cli-demos/blob/main/showcase/palisade/soul.md", + "summary": "Public PaliSade agent context: what it scans, its 0-100 Trust Score and consensus verdict scale, and its read-only, keyless, unknown-over-safe, no-custody boundaries." + }, + "feedbackPrompts": [ + "Are the eighteen inspectors and six consensus sources the right signals for deciding whether to trust a token before trading?", + "Is unknown-over-safe the right default when a data source is unavailable, even though it lowers confidence?", + "What additional proof would make a Trust Score trustworthy enough to gate a real swap or approval?" + ] +} diff --git a/showcase/palisade/skills/palisade-security-scan/SKILL.md b/showcase/palisade/skills/palisade-security-scan/SKILL.md new file mode 100644 index 0000000..01ece8c --- /dev/null +++ b/showcase/palisade/skills/palisade-security-scan/SKILL.md @@ -0,0 +1,134 @@ +--- +name: palisade-security-scan +description: Scan a token or wallet for onchain security risk using the live PaliSade MCP API on Robinhood Chain (and Ethereum, Polygon, Arbitrum, Solana). Use before signing an approval, swapping, or investing. Keyless, read-only — no signing, no custody. +tags: [crypto, security, robinhood, defi, rugpull, honeypot, mcp] +version: 1 +visibility: public +metadata: + emoji: "\U0001F441\uFE0F" + homepage: https://palisadescan.com + api: https://mcp.palisadescan.com + source: https://github.com/palisadescan/palisade + network: robinhood + chainId: 4663 + requires: + bins: [curl, python3] +--- + +# PaliSade Security Scan + +## When to use this skill + +Use it when a user (or an agent acting for a user) wants to evaluate a token or +wallet **before** taking an onchain action — trading, swapping, signing an +approval, or investing. Typical triggers: "is this token safe?", "check this +contract for a rugpull", "should I approve this spender?", "scan my wallet's +approvals". + +## When NOT to use this skill + +- Do **not** use it to sign, send, approve, or revoke anything — this skill is + read-only and has no write path. If the user wants to *execute* a revoke or + trade, hand off to a wallet tool; PaliSade only *reports*. +- Do not use it as a price oracle or trading-signal generator. It reports + security risk, not financial advice. +- Do not treat an `unknown` result as `safe`. + +## Inputs, tools, credentials, preconditions + +- **Input:** one target address — a wallet (`0x…`) or token contract (`0x…`). +- **Optional:** `chain` — one of `robinhood` (default), `ethereum`, `polygon`, + `arbitrum`, `solana`. +- **Credentials:** none. The API is keyless and free. +- **Preconditions:** `curl` and `python3` available; outbound HTTPS to + `https://mcp.palisadescan.com`. + +## Approval gates + +None. This skill performs no spending, posting, account creation, deployment, or +production mutation. It only issues read-only HTTP POSTs to the public scan API. +If a downstream workflow wants to act on a verdict (revoke, sell, approve), that +action belongs to a separate tool and requires its own explicit user approval. + +## Steps + +### 1. Validate the target (strict allowlist) + +Reject anything that is not exactly `0x` + 40 hex characters before any network +call. This blocks quotes, spaces, and shell/JSON metacharacters, so the value is +safe to interpolate into the payloads below. + +```bash +TARGET="$1" +if ! printf '%s' "$TARGET" | grep -qiE '^0x[0-9a-f]{40}$'; then + echo "PALISADE_INVALID_TARGET: not a valid 0x address" + exit 0 +fi +TARGET="$(printf '%s' "$TARGET" | tr '[:upper:]' '[:lower:]')" +CHAIN="${2:-robinhood}" +API="https://mcp.palisadescan.com" +``` + +### 2. Safety score + +```bash +curl -m 30 -s "$API/tools/call" -H "Content-Type: application/json" -d '{ + "jsonrpc":"2.0","id":1,"method":"tools/call", + "params":{"name":"palisade_safety_score", + "arguments":{"contract":"'"$TARGET"'","chain":"'"$CHAIN"'"}}}' \ + | python3 -c "import sys,json;print(json.dumps(json.load(sys.stdin).get('result',{}),indent=2))" +``` + +### 3. Honeypot probe + +```bash +curl -m 45 -s "$API/tools/call" -H "Content-Type: application/json" -d '{ + "jsonrpc":"2.0","id":2,"method":"tools/call", + "params":{"name":"palisade_detect_honeypot", + "arguments":{"contract":"'"$TARGET"'","chain":"'"$CHAIN"'"}}}' \ + | python3 -c "import sys,json;print(json.dumps(json.load(sys.stdin).get('result',{}),indent=2))" +``` + +### 4. Six-source consensus (recommended for a final verdict) + +```bash +curl -m 60 -s "$API/tools/call" -H "Content-Type: application/json" -d '{ + "jsonrpc":"2.0","id":3,"method":"tools/call", + "params":{"name":"palisade_consensus", + "arguments":{"contract":"'"$TARGET"'","chain":"'"$CHAIN"'"}}}' \ + | python3 -c "import sys,json;print(json.dumps(json.load(sys.stdin).get('result',{}),indent=2))" +``` + +For a wallet target, call `palisade_scan_approvals` with `{"wallet": "$TARGET"}` +instead of the contract tools above. + +## Stop conditions and handoff + +- Stop and report `PALISADE_INVALID_TARGET` if validation fails. +- Stop after reporting the verdict — do not attempt any onchain action. +- If the user asks to act on the result (revoke, swap, approve), hand off to a + wallet/signing tool and require explicit user approval there. +- On a network or API error, report the failure and the partial results + gathered; do not fabricate a verdict. + +## Validation checks + +- Confirm the API is reachable: `curl -s "$API/health"` returns + `{"status":"ok","service":"palisade-mcp",...}`. +- Each tool response is JSON with a `result` object; if `result` is missing, + treat the call as failed. +- Never coerce a missing or `unknown` field into `safe`. + +## Output contract + +Report, per scan target: + +- **Verdict** — the consensus `verdict` (`safe` / `caution` / `high` / + `critical`) and its `confidence`, or the safety `risk_level` when consensus is + not run. +- **Score** — the 0-100 `safety_score` when available. +- **Evidence** — the per-source votes/reasons and any `risk_factors`, verbatim + from the API. Surface `unknown` sources explicitly as unknown. +- **Recommendation** — the API's `recommendation` string when present. + +Do not add findings the API did not return. diff --git a/showcase/palisade/soul.md b/showcase/palisade/soul.md new file mode 100644 index 0000000..ec950a4 --- /dev/null +++ b/showcase/palisade/soul.md @@ -0,0 +1,42 @@ +# PaliSade — Public Agent Context + +This is the public, redacted context for the PaliSade security-scanner agent. +It contains no credentials, keys, private instructions, or operational secrets. + +## What PaliSade is + +A keyless, read-only onchain security scanner for Robinhood Chain (primary), +with cross-chain support for Ethereum, Polygon, Arbitrum, and Solana. It is +exposed as an MCP server that agents call over HTTP before signing an approval, +swapping, or investing. + +## What it does + +Runs up to eighteen read-only inspectors on a token or wallet — approvals, +honeypot simulation, tax, ownership, liquidity lock, deployer history, holder +concentration, clone detection, scam DB — then a consensus pass weighs six +independent signals into a single verdict. + +## Verdict scale + +- **Safety score:** 0-100, mapped to `safe` / `caution` / `risky` / `critical`. +- **Consensus verdict:** `safe` / `caution` / `high` / `critical`, with a + confidence value derived from how many weighted sources agree. + +## Boundaries (hard rules) + +- **Read-only.** Never signs a transaction, requests a signature, holds keys, or + moves funds. There is no write path. +- **Keyless and free.** No API key, account, or payment is required or handled. +- **Unknown over safe.** When a data source is unavailable, the result is + `unknown` and contributes zero weight — it never defaults to `safe`. +- **No fabrication.** Reports only what the chain and data sources return; it + does not invent findings to fill gaps. +- **Proof over claims.** Verdicts are backed by inspectable, structured evidence + (per-source votes, reasons, and scores). + +## Where it lives + +- API: https://mcp.palisadescan.com +- Website: https://palisadescan.com +- Source: https://github.com/palisadescan/palisade