import asyncio
import os
from uuid import uuid4
from ctxprotocol import ContextClient
MERIDIAN_TOOL_ID = "e5e62fa5-28e1-42f4-8b84-f4866234df43"
async def main() -> None:
async with ContextClient(api_key=os.environ["CONTEXT_API_KEY"]) as client:
meridian = await client.discovery.get(MERIDIAN_TOOL_ID)
futures = next(
(method for method in (meridian.mcp_tools or []) if method.name == "futures"),
None,
)
if not futures or not futures.execute_eligible or not futures.execute_price_usd:
raise RuntimeError("Meridian futures is not currently Execute-eligible")
result = await client.tools.execute(
tool_id=MERIDIAN_TOOL_ID,
tool_name="futures",
args={
"exchanges": ["binance", "bybit", "okx", "hyperliquid"],
"products": ["BTCUSDT"],
"columns": [
"close_price",
"funding_rate",
"dollar_open_interest_close",
],
"begin": "2026-08-06T23:00:00Z",
"end": "2026-08-07T00:00:00Z",
"resolution": "1h",
"include": {
"coverage": False,
"provenance": False,
"column_metadata": False,
},
},
idempotency_key=str(uuid4()),
max_spend_usd="0.005",
close_session=True,
)
print(result.result["rows"])
asyncio.run(main())