Hyperliquid MCP Server

Servidor MCP de Hyperliquid: Implementación completa

Este servidor MCP (Protocolo de Contexto de Modelo) proporciona un envoltorio completo para el SDK de Hyperliquid, exponiendo a los asistentes de IA todas las capacidades de negociación para los mercados al contado y de futuros. Permite a los asistentes de IA interactuar con la plataforma Hyperliquid para recuperar datos de mercado, ejecutar operaciones, gestionar posiciones y mucho más.

Características

Cobertura completa de API

  • Implementación completa de todas las API del SDK de Hyperliquid tanto para operaciones al contado como de futuros
  • Recuperación de datos de mercado (precios, libros de órdenes, velas)
  • Colocación y gestión de órdenes (mercado, límite, disparador, TWAP)
  • Gestión de posiciones (apalancamiento, margen, cierre)
  • Información y saldos de cuentas
  • Información sobre la tasa de financiación
  • Transferencias y retiros
  • Gestión de bóvedas
  • Gestión de subcuentas
  • Integración del sistema de referencias

Características técnicas

  • Autenticación adecuada utilizando tanto la clave privada como la dirección de la billetera
  • Manejo integral de errores y validación
  • Acceso a datos de mercado en tiempo real
  • Soporte para identificadores de pedidos de clientes (cloid) para seguimiento de pedidos
  • Soporte tanto para testnet como para mainnet

API identificadas e implementación

Basándome en un examen exhaustivo del repositorio del SDK de Hyperliquid, identifiqué e implementé las siguientes API:

API de datos de mercado

APIDescripciónImplementación
getAllMidsObtenga todos los precios medios para todas las criptomonedas disponiblesAsignación directa a info.getAllMids() del SDK
getL2BookObtener datos del libro de órdenes para un símboloAsignación directa a la info.getL2Book() del SDK
getCandleSnapshotObtener datos históricos de velasAsignación directa a info.getCandleSnapshot()
getMetaAndAssetCtxsObtenga metadatos y contextos de activos para futuros perpetuosAsignación directa a info.perpetuals.getMetaAndAssetCtxs() del SDK
getSpotMetaAndAssetCtxsObtenga metadatos y contextos de activos para mercados al contadoAsignación directa a info.spot.getSpotMetaAndAssetCtxs() del SDK

API de información de cuenta

APIDescripciónImplementación
getClearinghouseStateObtener el estado de la cuenta de futuros perpetuosAsignación directa a info.perpetuals.getClearinghouseState() del SDK
getSpotClearinghouseStateObtener el estado de la cuenta al contadoAsignación directa a info.spot.getSpotClearinghouseState() del SDK
getUserOpenOrdersObtener órdenes abiertasAsignación directa a la info.getUserOpenOrders() del SDK
getUserFillsObtener rellenos comercialesAsignación directa a info.getUserFills() del SDK
getUserFillsByTimeObtener rellenos comerciales por rango de tiempoAsignación directa a la info.getUserFillsByTime()
getUserFundingRecibir pagos de financiaciónAsignación directa a la información del SDK info.perpetuals.getUserFunding()
getFundingHistoryObtener el historial de tasas de financiaciónAsignación directa a info.perpetuals.getFundingHistory() del SDK
getPredictedFundingsObtenga tasas de financiación previstasAsignación directa a la información del SDK info.perpetuals.getPredictedFundings()

API de gestión de pedidos

APIDescripciónImplementación
placeOrderRealizar una orden (de mercado, límite, disparador)Asignación directa al exchange.placeOrder() del SDK
placeTwapOrderRealizar un pedido de TWAPAsignación directa al exchange.placeTwapOrder() del SDK
cancelOrderCancelar un pedidoAsignación directa al exchange.cancelOrder() del SDK
cancelOrderByCloidCancelar un pedido por ID de pedido del clienteAsignación directa al exchange.cancelOrderByCloid()
cancelTwapOrderCancelar un pedido de TWAPAsignación directa al exchange.cancelTwapOrder()
modifyOrderModificar un pedido existenteAsignación directa al exchange.modifyOrder() del SDK

API de gestión de posiciones

APIDescripciónImplementación
updateLeverageActualizar el apalancamiento de un símboloAsignación directa al exchange.updateLeverage() del SDK
updateIsolatedMarginActualizar el margen aislado de una posiciónAsignación directa al exchange.updateIsolatedMargin()
marketCloseCerrar una posición con una orden de mercadoImplementado a través de custom.marketClose() del SDK
closeAllPositionsCerrar todas las posicionesImplementado a través de custom.closeAllPositions() del SDK

API de transferencia y retiro

APIDescripciónImplementación
usdTransferTransferir USDC a otra billeteraAsignación directa al exchange.usdTransfer() del SDK
initiateWithdrawalRetirar USDC a ArbitrumAsignación directa al exchange.initiateWithdrawal() del SDK
spotTransferTransferir activos al contado a otra billeteraAsignación directa al exchange.spotTransfer() del SDK
transferBetweenSpotAndPerpTransferencia entre cuentas al contado y perpetuasAsignación directa al exchange.transferBetweenSpotAndPerp() del SDK

API de gestión de bóvedas

APIDescripciónImplementación
createVaultCrear una nueva bóvedaAsignación directa al exchange.createVault() del SDK
getVaultDetailsObtener detalles de la bóvedaAsignación directa a info.getVaultDetails() del SDK
vaultTransferTransferir fondos entre la bóveda y la billeteraAsignación directa a exchange.vaultTransfer() del SDK
vaultDistributeDistribuir fondos de la bóveda a los seguidoresAsignación directa a exchange.vaultDistribute() del SDK
vaultModifyModificar la configuración de la bóvedaAsignación directa a exchange.vaultModify() del SDK

API de gestión de subcuentas

APIDescripciónImplementación
createSubAccountCrear una nueva subcuentaAsignación directa al exchange.createSubAccount() del SDK
getSubAccountsObtener todas las subcuentasAsignación directa a info.getSubAccounts() del SDK
subAccountTransferTransferencia de fondos entre subcuentas (perpetua)Asignación directa al exchange.subAccountTransfer() del SDK
subAccountSpotTransferTransferir activos al contado entre subcuentasAsignación directa al exchange.subAccountSpotTransfer() del SDK

API diversas

APIDescripciónImplementación
setReferrerEstablecer un código de referenciaAsignación directa al exchange.setReferrer() del SDK
referralObtener información de referenciaAsignación directa a info.referral() del SDK
setDisplayNameEstablecer un nombre para mostrar en la tabla de clasificaciónAsignación directa al exchange.setDisplayName() del SDK
getUserRoleObtener el rol de un usuarioAsignación directa a info.getUserRole() del SDK
approveAgentAprobar a un agente para que opere en nombre del usuarioAsignación directa al exchange.approveAgent() del SDK
approveBuilderFeeAprobar una tarifa de construcciónAsignación directa al exchange.approveBuilderFee()

Implementación de autenticación

El servidor MCP implementa la autenticación utilizando tanto la clave privada como la dirección de la billetera:

  1. Autenticación de clave privada : El servidor acepta una clave privada mediante una variable de entorno o un archivo de configuración. Esta clave privada se utiliza para firmar transacciones y autenticarse con la API de Hyperliquid.
  2. Autenticación de la dirección de la billetera : El servidor también acepta una dirección de billetera, que se utiliza para operaciones de solo lectura. Si se proporciona una clave privada, pero no la dirección de la billetera, el servidor la derivará de la clave privada.
  3. Compatibilidad con direcciones de bóveda : para las operaciones de bóveda, el servidor también admite la especificación de una dirección de bóveda.

La validación de autenticación se realiza antes de ejecutar cualquier operación que lo requiera, garantizando que el usuario esté correctamente autenticado antes de intentar ejecutar operaciones o acceder a la información de la cuenta.

Manejo de errores y validación

El servidor MCP implementa un manejo y validación de errores integral:

  1. Validación del cliente : antes de ejecutar cualquier operación, el servidor valida que el cliente Hyperliquid esté inicializado.
  2. Validación de autenticación : para las operaciones que requieren autenticación, el servidor valida que el usuario esté correctamente autenticado.
  3. Validación de parámetros : el servidor valida todos los parámetros antes de pasarlos al SDK, garantizando que sean del tipo y formato correctos.
  4. Manejo de errores : el servidor detecta y maneja todos los errores del SDK, proporcionando mensajes de error claros al usuario.
  5. Registro : el servidor registra todas las operaciones y errores, lo que facilita la depuración de problemas.

Desafíos de implementación y consideraciones especiales

1. Implementación de órdenes de mercado

La API de Hyperliquid no tiene un punto de acceso directo para órdenes de mercado. En su lugar, las órdenes de mercado se implementan como órdenes límite agresivas con tiempo de vigencia de "Inmediato o Cancelación" (IOC). Para garantizar la ejecución, aplicamos un factor de deslizamiento al precio actual:

// Apply 0.5% slippage for market orders to ensure execution const slippagePrice = isBuy ? currentPrice * 1.005 : // Buy 0.5% higher than mid price currentPrice * 0.995; // Sell 0.5% lower than mid price

2. Manejo de símbolos del mercado al contado

Los símbolos del mercado al contado en Hyperliquid tienen el sufijo "-SPOT". El servidor MCP gestiona esto de forma transparente, añadiendo el sufijo cuando es necesario:

// For spot market orders, we need to use the same API endpoint but with the spot symbol const spotSymbol = `${symbol}-SPOT`;

3. Análisis de la respuesta del pedido

El formato de respuesta de la API de Hyperliquid para la realización de pedidos es complejo y requiere un análisis cuidadoso para extraer el ID del pedido:

// Extract order ID from the response let orderId = null; if (result.response && result.response.data && result.response.data.statuses) { for (const status of result.response.data.statuses) { if (status.resting) { orderId = status.resting.oid; break; } else if (status.filled) { orderId = status.filled.oid; break; } } }

4. Manejo de valores numéricos

La API de Hyperliquid suele devolver valores numéricos como cadenas. El servidor MCP los convierte a números para facilitar su uso:

// Convert string values to numbers const result = {}; for (const [symbol, price] of Object.entries(allMids)) { result[symbol] = parseFloat(price); }

5. Compatibilidad con WebSockets

El SDK de Hyperliquid admite conexiones WebSocket para datos en tiempo real. El servidor MCP inicializa el cliente con la compatibilidad con WebSocket habilitada:

client = new Hyperliquid({ privateKey: config.privateKey, testnet: config.testnet, walletAddress: config.walletAddress, vaultAddress: config.vaultAddress, enableWs: true });

Prerrequisitos

  • Node.js (v14 o superior)
  • Una cuenta hiperlíquida
  • Una clave privada de Ethereum para autenticación (necesaria para el comercio)
  • La dirección de su billetera (requerida para operar)

Configuración

El servidor se puede configurar utilizando variables de entorno o un archivo de configuración:

Variables de entorno

  • HYPERLIQUID_PRIVATE_KEY : Su clave privada de Ethereum para autenticación (requerida para operar)
  • HYPERLIQUID_WALLET_ADDRESS : La dirección de su billetera (necesaria para operar)
  • HYPERLIQUID_VAULT_ADDRESS : Su dirección de bóveda (opcional, para operaciones de bóveda)
  • HYPERLIQUID_TESTNET : Establézcalo en 'verdadero' para usar la red de prueba, en 'falso' para la red principal (valor predeterminado: falso)
  • LOG_LEVEL : Nivel de registro: 'depuración', 'información', 'advertencia' o 'error' (predeterminado: 'información')

Archivo de configuración

También puede crear un archivo .hyperliquid-config.json en el mismo directorio que el servidor con la siguiente estructura:

{ "privateKey": "your-ethereum-private-key", "walletAddress": "your-wallet-address", "vaultAddress": "your-vault-address", "testnet": false, "logLevel": "info", "popularCoins": ["BTC", "ETH", "SOL", "AVAX", "ARB", "DOGE", "LINK", "MATIC"] }

Ejecución del servidor

Inicie el servidor ejecutando:

node hyperliquid-mcp-server-complete.js

Herramientas disponibles

El servidor proporciona un conjunto completo de herramientas para interactuar con el intercambio de Hyperliquid. A continuación, se muestran algunos ejemplos:

Herramientas de datos de mercado

  • getMarketPrice : obtiene el precio actual de una criptomoneda específica
  • getOrderBook : obtiene el libro de órdenes actual para una criptomoneda específica
  • getCandleData : obtiene datos históricos de velas para una criptomoneda específica
  • getAllMids : Obtenga todos los precios medios de todas las criptomonedas disponibles

Herramientas de información de la cuenta

  • getAccountInfo : obtiene información sobre la cuenta de futuros perpetuos del usuario
  • getSpotAccountInfo : obtiene información sobre la cuenta de operaciones al contado del usuario
  • getUserOpenOrders : obtiene todos los pedidos abiertos para el usuario
  • getUserFills : obtiene los rellenos recientes del usuario

Herramientas de gestión de pedidos

  • placeMarketOrder : Realizar una orden de mercado para una criptomoneda específica
  • placeLimitOrder : coloca una orden limitada para una criptomoneda específica
  • placeTriggerOrder : coloca una orden de activación (stop loss o take profit)
  • placeTwapOrder : Realizar un pedido TWAP (Precio promedio ponderado en el tiempo)
  • cancelOrder : Cancelar un pedido existente
  • cancelOrderByCloid : Cancelar un pedido por ID de pedido del cliente
  • cancelAllOrders : Cancelar todos los pedidos abiertos
  • modifyOrder : Modificar un pedido existente

Herramientas de gestión de posiciones

  • updateLeverage : Actualiza el apalancamiento de una criptomoneda específica
  • updateIsolatedMargin : Actualiza el margen aislado para una posición
  • closePosition : Cerrar una posición abierta
  • closeAllPositions : Cerrar todas las posiciones abiertas

Herramientas de transferencia y retiro

  • usdTransfer : transfiere USDC a otra billetera
  • initiateWithdrawal : Retirar USDC a Arbitrum
  • spotTransfer : transfiere activos spot a otra billetera
  • transferBetweenSpotAndPerp : transfiere fondos entre cuentas al contado y perpetuas

Herramientas de gestión de bóvedas

  • createVault : Crea una nueva bóveda
  • getVaultDetails : obtener detalles sobre una bóveda
  • vaultTransfer : transfiere fondos entre la bóveda y la billetera de futuros perpetuos
  • vaultDistribute : Distribuye fondos desde una bóveda a los seguidores
  • vaultModify : Modificar la configuración de la bóveda

Herramientas de gestión de subcuentas

  • createSubAccount : Crea una nueva subcuenta
  • getSubAccounts : obtiene todas las subcuentas del usuario
  • subAccountTransfer : Transferir fondos entre subcuentas (perpetuo)
  • subAccountSpotTransfer : Transferir activos al contado entre subcuentas

Recursos disponibles

El servidor proporciona los siguientes recursos:

  • market-data : Datos de mercado de criptomonedas populares en el mercado de futuros perpetuos
  • account-info : Información de la cuenta, incluidos saldos y posiciones para futuros perpetuos
  • spot-market-data : Datos de mercado de criptomonedas populares en el mercado spot
  • spot-account-info : Información de la cuenta, incluidos los saldos para operaciones al contado
  • open-orders : todas las órdenes abiertas para el usuario
  • positions : Todas las posiciones abiertas para el usuario
  • funding-rates : tasas de financiación actuales para todas las criptomonedas

Consideraciones de seguridad

  • Seguridad de la clave privada : Tu clave privada de Ethereum te da acceso completo a tus fondos. Nunca la compartas ni la expongas en repositorios públicos.
  • Utilice Testnet primero : pruebe siempre su configuración en Testnet antes de utilizar fondos reales en Mainnet.
  • Limitar acceso : restrinja el acceso al servidor MCP a aplicaciones y asistentes de IA confiables.

Descargo de responsabilidad

Operar con criptomonedas conlleva un riesgo significativo. Esta herramienta se proporciona únicamente con fines educativos e informativos. Siempre comprenda los riesgos antes de operar y nunca opere con fondos que no pueda permitirse perder.

ID: 8j15gr3bne