We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Habinar/mcp-paradex-py'
If you have feedback or need assistance with the MCP directory API, please join our Discord server
"""
Paradex API client utilities.
"""
import asyncio
import logging
from typing import Any
from paradex_py.account.account import ParadexAccount
from paradex_py.api.api_client import ParadexApiClient
from mcp_paradex.utils.config import config
logger = logging.getLogger(__name__)
# Singleton instance of the Paradex client
_paradex_client: ParadexApiClient | None = None
_client_lock = asyncio.Lock()
async def get_paradex_client() -> ParadexApiClient:
"""
Get or initialize the Paradex client.
Returns:
Paradex: The initialized Paradex client.
Raises:
ValueError: If the required configuration is not set.
"""
global _paradex_client
if _paradex_client is not None:
return _paradex_client
async with _client_lock:
# Double-check in case another task initialized it while waiting
if _paradex_client is not None:
return _paradex_client
# if not config.is_configured():
# raise ValueError(
# "Paradex client configuration is incomplete. "
# "Make sure L1_ADDRESS and L1_PRIVATE_KEY are set."
# )
# _paradex_client = Paradex(
# env=config.ENVIRONMENT,
# logger=logger,
# l1_address=config.L1_ADDRESS,
# l1_private_key=config.L1_PRIVATE_KEY
# )
_paradex_client = ParadexApiClient(env=config.ENVIRONMENT, logger=logger)
if config.PARADEX_ACCOUNT_PRIVATE_KEY:
logger.info("Authenticating Paradex client")
response = _paradex_client.fetch_system_config()
acc = ParadexAccount(
config=response,
l1_address="0x0000000000000000000000000000000000000000",
l2_private_key=config.PARADEX_ACCOUNT_PRIVATE_KEY,
)
_paradex_client.init_account(acc)
return _paradex_client
async def get_authenticated_paradex_client() -> ParadexApiClient:
"""
Get or initialize the authenticated Paradex client.
Returns:
Paradex: The initialized Paradex client.
Raises:
ValueError: If the required configuration is not set.
"""
client = await get_paradex_client()
if client.account is None:
raise ValueError("Paradex client is not authenticated")
return client
async def api_call(
client: ParadexApiClient, path: str, params: dict[str, Any] | None = None
) -> dict[str, Any]:
"""
Make a direct API call to Paradex.
Args:
client: The Paradex client instance.
path: The API path to call.
params: Optional parameters for the API call.
Returns:
Dict[str, Any]: The response from the API call.
"""
try:
logger.info(f"Calling {path} with params: {params}")
response = client.get(client.api_url, path, params)
return response
except Exception:
logger.exception(f"Error calling {path}")
raise