rmi-backend/app/domains/mcp/x402_tool_manager.py
cryptorugmunch 0a8c73d99b feat(domains): consolidate bulletin, intelligence, markets, admin, referral, mcp + mypy gate
- Make app/domains/auth/ and app/core/redis.py mypy-clean under strict.
- Add mypy-gate.ini and Makefile mypy-gate target; promote typecheck-gate in CI.
- Consolidate domains into app/domains/: bulletin, admin, intelligence, markets.
- Extract referral domain incl. DeFi partner DEX ref links; keep Telegram bot wired.
- Move app/mcp/ package and app/api/v1/mcp/router into app/domains/mcp/.
- Archive dead app/mcp_router.py.
2026-07-07 16:43:49 +07:00

362 lines
15 KiB
Python

"""x402 tool manager - loads and exposes tool bundles across free/trial/premium tiers."""
import logging
from dataclasses import dataclass
from .x402_bundles import X402Bundle
logger = logging.getLogger("x402_tool_manager")
@dataclass
class X402ToolManager:
"""Manages all x402 tool bundles including free/trial/premium."""
def __init__(self):
self._bundles = self._load_all_bundles()
self._index = {b.bundle_id: b for b in self._bundles}
self._index.update({b.name.lower(): b for b in self._bundles})
logger.info("X402ToolManager initialized with %d bundles", len(self._bundles))
def _load_all_bundles(self) -> list[X402Bundle]:
"""Load complete catalog: free, trial, standard, premium."""
return [
# ========== FREE TIER ==========
X402Bundle(
bundle_id="free-health",
name="Free Health Check",
description="Free system health and status endpoints",
category="free",
endpoints=[
{"method": "GET", "path": "/health", "description": "System health"},
{"method": "GET", "path": "/status", "description": "System status"},
{"method": "GET", "path": "/version", "description": "API version"},
],
price_usd=0.0,
tier="free",
is_premium=False,
requires_payment=False,
),
X402Bundle(
bundle_id="free-discovery",
name="Free Tool Discovery",
description="Discover all available tools without payment",
category="free",
endpoints=[
{"method": "GET", "path": "/.well-known/x402", "description": "x402 discovery"},
{"method": "GET", "path": "/v1/bundles", "description": "List all bundles"},
{"method": "GET", "path": "/v1/bundles/{id}", "description": "Bundle details"},
],
price_usd=0.0,
tier="free",
is_premium=False,
requires_payment=False,
),
# ========== TRIAL TIER ==========
X402Bundle(
bundle_id="trial-security",
name="Trial Security Suite",
description="7-day trial of premium security tools",
category="trial",
endpoints=[
{"method": "POST", "path": "/scan/contract", "description": "Smart contract scan"},
{"method": "POST", "path": "/scan/token", "description": "Token risk scan"},
{"method": "POST", "path": "/scan/wallet", "description": "Wallet risk scan"},
],
price_usd=0.0,
tier="trial",
is_premium=False,
requires_payment=False,
),
X402Bundle(
bundle_id="trial-intelligence",
name="Trial Intelligence Suite",
description="7-day trial of market intelligence tools",
category="trial",
endpoints=[
{"method": "GET", "path": "/market/pulse", "description": "Token pulse"},
{"method": "GET", "path": "/market/trends", "description": "Market trends"},
{"method": "GET", "path": "/market/whales", "description": "Whale tracking"},
],
price_usd=0.0,
tier="trial",
is_premium=False,
requires_payment=False,
),
# ========== STANDARD TIER ==========
X402Bundle(
bundle_id="token-pulse",
name="Token Pulse",
description="Real-time market momentum, volume, whale alerts",
category="market",
endpoints=[
{"method": "GET", "path": "/tokens", "description": "Token listings"},
{"method": "GET", "path": "/tokens/{address}", "description": "Token details"},
{
"method": "GET",
"path": "/lp/{address}",
"description": "Liquidity pool analysis",
},
],
price_usd=0.01,
tier="standard",
),
X402Bundle(
bundle_id="url-scam-detector",
name="URL Scam Detector",
description="Detect phishing sites, fake docs, malicious redirects",
category="security",
endpoints=[
{"method": "POST", "path": "/scan/url", "description": "URL scan"},
{"method": "POST", "path": "/scan/domain", "description": "Domain analysis"},
],
price_usd=0.01,
tier="standard",
),
X402Bundle(
bundle_id="wallet-profiler",
name="Wallet Profiler",
description="Full wallet analysis with persona detection",
category="wallet",
endpoints=[
{"method": "POST", "path": "/wallet/profile", "description": "Profile wallet"},
{
"method": "POST",
"path": "/wallet/history",
"description": "Transaction history",
},
],
price_usd=0.05,
tier="standard",
),
X402Bundle(
bundle_id="social-sentiment",
name="Social Sentiment",
description="Cross-platform sentiment analysis",
category="market",
endpoints=[
{
"method": "POST",
"path": "/sentiment/analyze",
"description": "Analyze sentiment",
},
{
"method": "GET",
"path": "/sentiment/trends",
"description": "Trending topics",
},
],
price_usd=0.03,
tier="standard",
),
# ========== PREMIUM TIER ==========
X402Bundle(
bundle_id="suspicious-transfers",
name="Suspicious Transfers Scanner",
description="Cross-chain anomaly detection with RugMunch intelligence",
category="security",
endpoints=[
{"method": "POST", "path": "/scan/transfers", "description": "Scan transfers"},
{"method": "GET", "path": "/scan/results", "description": "Get results"},
{"method": "POST", "path": "/scan/anomaly", "description": "Anomaly detection"},
],
price_usd=0.15,
tier="premium",
is_premium=True,
),
X402Bundle(
bundle_id="wallet-labeler",
name="Wallet Labeler",
description="Behavioral reputation engine (Arkham+Nansen+Alchemy)",
category="security",
endpoints=[
{"method": "POST", "path": "/label/wallet", "description": "Label wallet"},
{"method": "GET", "path": "/label/history", "description": "Label history"},
{
"method": "POST",
"path": "/label/cluster",
"description": "Cluster detection",
},
],
price_usd=0.20,
tier="premium",
is_premium=True,
),
X402Bundle(
bundle_id="memory-bank",
name="Memory Bank",
description="Unified agent knowledge store with GCS export",
category="ai",
endpoints=[
{"method": "POST", "path": "/memory/store", "description": "Store knowledge"},
{"method": "GET", "path": "/memory/query", "description": "Query knowledge"},
{"method": "POST", "path": "/memory/export", "description": "Export to GCS"},
],
price_usd=0.12,
tier="premium",
is_premium=True,
),
X402Bundle(
bundle_id="deep-contract-audit",
name="Deep Contract Audit",
description="Smart contract audit, honeypot detection, hidden mint functions",
category="security",
endpoints=[
{
"method": "POST",
"path": "/audit/contract",
"description": "Full contract audit",
},
{"method": "POST", "path": "/audit/honeypot", "description": "Honeypot check"},
{
"method": "POST",
"path": "/audit/proxy",
"description": "Proxy pattern check",
},
],
price_usd=0.05,
tier="premium",
is_premium=True,
),
X402Bundle(
bundle_id="token-forensics",
name="Token Forensics",
description="Deep forensics from DexScreener, GeckoTerminal, CoinGecko",
category="forensics",
endpoints=[
{
"method": "POST",
"path": "/forensics/token",
"description": "Token forensics",
},
{
"method": "POST",
"path": "/forensics/report",
"description": "Generate report",
},
],
price_usd=0.10,
tier="premium",
is_premium=True,
),
X402Bundle(
bundle_id="whale-decoder",
name="Whale Decoder",
description="Advanced whale wallet analysis across chains",
category="wallet",
endpoints=[
{
"method": "POST",
"path": "/whale/decode",
"description": "Decode whale strategy",
},
{"method": "GET", "path": "/whale/positions", "description": "Track positions"},
],
price_usd=0.15,
tier="premium",
is_premium=True,
),
X402Bundle(
bundle_id="darkroom-security",
name="Darkroom Security Suite",
description="Advanced security analysis, threat detection, forensics",
category="security",
endpoints=[
{"method": "POST", "path": "/security/scan", "description": "Security scan"},
{
"method": "POST",
"path": "/security/threats",
"description": "Threat database",
},
{
"method": "POST",
"path": "/security/forensics",
"description": "Forensic analysis",
},
],
price_usd=0.20,
tier="premium",
is_premium=True,
),
X402Bundle(
bundle_id="solana-mcp",
name="Solana MCP Server",
description="Native Solana blockchain queries via MCP protocol",
category="mcp",
endpoints=[
{
"method": "POST",
"path": "/mcp/solana/balance",
"description": "Get SOL balance",
},
{
"method": "POST",
"path": "/mcp/solana/transaction",
"description": "Get transaction",
},
{
"method": "POST",
"path": "/mcp/solana/tokens",
"description": "Get token accounts",
},
{
"method": "POST",
"path": "/mcp/solana/simulate",
"description": "Simulate transaction",
},
],
price_usd=0.08,
tier="premium",
is_premium=True,
),
X402Bundle(
bundle_id="ethereum-mcp",
name="Ethereum MCP Server",
description="Native Ethereum blockchain queries via MCP protocol",
category="mcp",
endpoints=[
{
"method": "POST",
"path": "/mcp/eth/balance",
"description": "Get ETH balance",
},
{
"method": "POST",
"path": "/mcp/eth/transaction",
"description": "Get transaction",
},
{"method": "POST", "path": "/mcp/eth/call", "description": "Call contract"},
{"method": "POST", "path": "/mcp/eth/logs", "description": "Get event logs"},
{"method": "POST", "path": "/mcp/eth/ens", "description": "Resolve ENS"},
],
price_usd=0.08,
tier="premium",
is_premium=True,
),
]
def list_bundles(self, tier: str | None = None) -> list[X402Bundle]:
"""List all or filtered bundles."""
if tier:
return [b for b in self._bundles if b.tier == tier]
return self._bundles
def get_bundle(self, identifier: str) -> X402Bundle | None:
return self._index.get(identifier.lower())
@property
def free_bundles(self) -> list[X402Bundle]:
return [b for b in self._bundles if b.tier == "free"]
@property
def trial_bundles(self) -> list[X402Bundle]:
return [b for b in self._bundles if b.tier == "trial"]
@property
def premium_bundles(self) -> list[X402Bundle]:
return [b for b in self._bundles if b.is_premium]
@property
def total_endpoints(self) -> int:
return sum(len(b.endpoints) for b in self._bundles)