"""Pydantic schemas + thin tool wrappers for the /mcp-cross and /mcp routers.""" from __future__ import annotations from typing import Literal from pydantic import BaseModel from cerbero_mcp.exchanges.cross.client import CrossClient, UnifiedClient AssetClass = Literal["crypto"] Exchange = Literal["deribit", "hyperliquid"] class GetHistoricalReq(BaseModel): symbol: str asset_class: AssetClass = "crypto" interval: str = "1h" start_date: str end_date: str async def get_historical(client: CrossClient, params: GetHistoricalReq) -> dict: return await client.get_historical( symbol=params.symbol, asset_class=params.asset_class, interval=params.interval, start_date=params.start_date, end_date=params.end_date, ) # ── Unified /mcp interface ──────────────────────────────────────────── class GetInstrumentsReq(BaseModel): exchange: Exchange | None = None # None → fan-out over all integrated venues currency: str = "BTC" # Deribit only kind: str | None = "future" # Deribit only: future | option | spot class UnifiedGetHistoricalReq(BaseModel): exchange: Exchange instrument: str interval: str = "1h" start_date: str end_date: str async def get_instruments(client: UnifiedClient, params: GetInstrumentsReq) -> dict: return await client.get_instruments( exchange=params.exchange, currency=params.currency, kind=params.kind, ) async def unified_get_historical( client: UnifiedClient, params: UnifiedGetHistoricalReq ) -> dict: return await client.get_historical( exchange=params.exchange, instrument=params.instrument, interval=params.interval, start_date=params.start_date, end_date=params.end_date, )