Lp3
Medium
- Category
- MCP Least Privilege
- Confidence
- 70% confidence
- Finding
- Without declared permissions the skill's intent is opaque and cannot be validated.
Security checks across malware telemetry and agentic risk
This skill is a disclosed Base-chain market scanner that queries public crypto data sources and does not show hidden persistence, account control, trading, or destructive behavior.
Install only if you want an agent to query third-party crypto market-data sites and generate Base-chain alerts. Validate token addresses before use, avoid logged-in browser sessions unless needed, protect any Basescan API key, and verify trading signals independently before acting.
## Basescan (free tier = rate limited) Base URL: `https://api.basescan.org/api` | Module | Action | Key Params | |--------|--------|------------|
## VIRTUAL Protocol Official API: `https://api.virtuals.io/api/virtuals` Key params: - `filters[status]=DEPLOYED` — live agents only
from datetime import datetime, timezone DEXSCREENER_BASE = "https://api.dexscreener.com" BASESCAN_API = "https://api.basescan.org/api" GMGN_BASE = "https://gmgn.ai/defi/quotation/v1" def fetch_json(url, headers=None):
print(f" → https://basescan.org/token/tokenholderchart/{addr}")
print()
# Try the free endpoint
url = f"https://api.basescan.org/api?module=token&action=tokenholderlist&contractaddress={addr}&page=1&offset=20&apikey=YourApiKeyToken"
data = fetch_json(url)
if data.get("status") == "1":
holders = data.get("result", [])# Bankr API endpoints
endpoints = [
"https://api.bankr.bot/tokens/trending?chain=base&limit=20",
"https://bankr.fun/api/tokens?chain=base&sort=trending&limit=20",
"https://api.bankr.fun/v1/tokens/trending?chain=base",
]endpoints = [
"https://api.bankr.bot/tokens/trending?chain=base&limit=20",
"https://bankr.fun/api/tokens?chain=base&sort=trending&limit=20",
"https://api.bankr.fun/v1/tokens/trending?chain=base",
]
data = {"error": "not tried"}print("⚡ VIRTUAL Protocol — AI Agent Ecosystem\n")
# Virtual Protocol API
url = "https://api.virtuals.io/api/virtuals?filters[status]=DEPLOYED&sort[0]=createdAt%3Adesc&pagination[page]=1&pagination[pageSize]=20"
data = fetch_json(url)
if "error" in data:print(f"Virtual API error: {data['error']}")
# Fallback: DexScreener search for VIRTUAL pairs
print("Falling back to DexScreener VIRTUAL pairs...\n")
url2 = "https://api.dexscreener.com/latest/dex/tokens/0x0b3e328455c4059EEb9e3f84b5543F74E24e7E1b"
data2 = fetch_json(url2)
pairs = [p for p in data2.get("pairs", []) if p.get("chainId") == "base"]
print(f"Found {len(pairs)} VIRTUAL pairs on Base:\n")results = []
for term in ai_terms[:4]: # Limit API calls
url = f"https://api.dexscreener.com/latest/dex/search?q={term}"
data = fetch_json(url)
pairs = [p for p in data.get("pairs", []) if p.get("chainId") == "base"]
results.extend(pairs)66/66 vendors flagged this skill as clean.