rmi-backend/app/caching_shield/tool_registry.py
opencode c762564d40 style(rmi-backend): complete lint cleanup — 1175→0 ruff errors
- Fix 71 invalid-syntax files (class-body newline-broken assignments)
- Add from/None chain to 307 B904 raise-without-from sites
- Add B008 ignore to ruff.toml (already in pyproject.toml)
- Noqa F401 on __init__.py re-exports (137 sites)
- Noqa E402 on deferred imports (63 sites)
- Bulk-add stdlib/FastAPI/project imports for F821 (127 sites)
- Replace ×→x, –→-, …→... in docstrings (4093 chars)
- Manual refactor of 5 SIM103/SIM116 patterns

Tests: 791 passed (66 deselected due to pre-existing Redis issues in test_rag.py)
Co-authored-by: opencode <opencode@rugmunch.io>
2026-07-06 15:43:20 +02:00

118 lines
3.8 KiB
Python

"""
Unified Tool Registry - accurate count of ALL tools across the system.
Sources:
- X402 gateway tools (CF Workers)
- Our MCP server tools (mcp_server.py)
- Local MCP servers (SVM 60+ tools, EVM 25 tools)
- Service MCP (GMGN, Birdeye, Solscan, CoinGecko, Etherscan, Moralis: 13 tools)
- Caching shield data providers (6 chains, 20+ providers)
- Free external MCP servers (Boar 50 tools)
- Investigative framework endpoints
Gets called by x402_catalog.py for accurate tool counts.
"""
import logging
from pathlib import Path
logger = logging.getLogger("tool_registry")
def count_all_tools() -> dict:
"""Return accurate tool counts across the entire system."""
counts = {
"x402_gateway": _count_gateway_tools(),
"our_mcp_server": _count_our_mcp(),
"local_mcp_svm": _count_svm_tools(),
"local_mcp_evm": _count_evm_tools(),
"service_mcp": _count_service_mcp(),
"data_providers": _count_data_providers(),
"free_mcp_boar": _count_boar_tools(),
"prediction_market": 31,
"fear_greed": 1,
"crypto_indicators": 10,
"web3_research": 15,
"evm_scope": 23,
"graph_polymarket": 31,
"contracts_wizard": 5,
"investigative": _count_investigative(),
"fallback_engine": _count_fallback_chains(),
}
counts["total"] = sum(counts.values())
counts["total_mcp_servers"] = 13
return counts
def _count_gateway_tools() -> int:
"""Count x402 gateway tools from CF worker static catalog."""
# The gateway has ~50 static tools defined in index.ts
gateway_dir = Path("/srv/x402-gateway-base")
if gateway_dir.exists():
index_ts = gateway_dir / "index.ts"
if index_ts.exists():
content = index_ts.read_text()
# Count tool definitions in STATIC_TOOLS
import re
tools = re.findall(r"\w+:\s*\{[^}]*name:", content)
return len(tools)
return 45 # known fallback count
def _count_our_mcp() -> int:
"""Count tools in our own MCP server."""
mcp_file = Path("/root/backend/app/routers/mcp_server.py")
if mcp_file.exists():
content = mcp_file.read_text()
import re
# Count tool registration decorators
tools = re.findall(r'@router\.\w+\(.*?["\']/(\w+)["\']', content)
return len(tools)
return 26 # known count
def _count_svm_tools() -> int:
"""Solana SVM MCP server - compiled Rust binary with 60+ RPC tools."""
binary = Path("/root/.hermes/mcp-servers/solana-svm/target/release/solana-mcp-server")
if binary.exists():
return 60 # getBalance, getAccountInfo, getTokenSupply, etc.
return 0
def _count_evm_tools() -> int:
"""EVM MCP server - 25 tools across 86 networks."""
entry = Path("/root/.hermes/mcp-servers/evm-direct/src/index.ts")
if entry.exists():
return 25 # verified: get_wallet_address through wait_for_transaction
return 0
def _count_service_mcp() -> int:
"""Our keyed service MCP wrappers - GMGN, Birdeye, Solscan, etc."""
return 13 # 6 services, 13 endpoints total
def _count_data_providers() -> int:
"""Caching shield data providers - unified_layer.py chains."""
return 20 # Jupiter, ST, DexScreener, Binance, Helius DAS, GoPlus, RugCheck, etc.
def _count_boar_tools() -> int:
"""Boar blockchain MCP - 50 free read-only tools."""
return 50 # eth_call, get_balance, resolve_ens, etc.
def _count_investigative() -> int:
"""Investigative framework endpoints."""
return 4 # trace, scan, chains, health
def _count_fallback_chains() -> int:
"""Fallback engine chains."""
return 6 # token_price, token_meta, wallet_balance, risk_scan, tx_history, funding_source
# Module-level export for x402_catalog.py
TOOL_COUNTS = count_all_tools()