Haiku DeFi MCP

Servidor MCP para ejecución DeFi — permite a agentes de IA intercambiar, proporcionar liquidez, prestar, puentear y ejecutar estrategias de rendimiento en 22 cadenas en una sola transacción.

Documentación

Servidor Haiku MCP

Un servidor MCP (Protocolo de Contexto de Modelo) que permite a los agentes de IA ejecutar transacciones blockchain a través de la API de Haiku.

npm version GitHub

Características

  • Descubrimiento de Tokens: Lista tokens admitidos y activos DeFi en 21 redes blockchain
  • Verificación de Saldos: Obtén saldos de billeteras en todas las cadenas admitidas
  • Cotizaciones de Trading: Obtén cotizaciones para swaps y rebalanceo de carteras
  • Construcción de Transacciones: Convierte cotizaciones en transacciones EVM sin firmar
  • Integración de Billeteras: Extrae payloads EIP-712 para firma externa de billeteras (Coinbase, AgentKit, Safe, etc.)
  • Ejecución Autónoma: Ejecución opcional de extremo a extremo con la variable de entorno WALLET_PRIVATE_KEY
  • Descubrimiento de Rendimientos: Encuentra las oportunidades DeFi de mayor rendimiento entre protocolos y cadenas, filtradas por APY, TVL y categoría
  • Análisis de Cartera: Analiza las tenencias de una billetera y muestra oportunidades de rendimiento específicas del contexto según lo que realmente posee

Instalación

npm install haiku-mcp-server

O ejecuta directamente con npx:

npx haiku-mcp-server

Configuración

Variables de Entorno

VariableRequeridaDescripción
HAIKU_API_KEYNoTu clave API de Haiku para límites de velocidad más altos. Contacta a contact@haiku.trade para solicitar una.
HAIKU_BASE_URLNoURL base de la API. Por defecto es https://api.haiku.trade/v1
WALLET_PRIVATE_KEYNoClave privada (hex 0x) para ejecución autónoma a través de haiku_execute.
RPC_URL_{chainId}NoSobrescribe la URL RPC para una cadena específica (ej., RPC_URL_42161 para Arbitrum).

Nota: La API funciona sin clave, pero proporcionar una desbloquea límites de velocidad más altos para uso en producción.

Configuración de Claude Desktop

Agrega a tu claude_desktop_config.json:

{
  "mcpServers": {
    "haiku": {
      "command": "npx",
      "args": ["haiku-mcp-server"]
    }
  }
}

Con clave API para límites de velocidad más altos:

{
  "mcpServers": {
    "haiku": {
      "command": "npx",
      "args": ["haiku-mcp-server"],
      "env": {
        "HAIKU_API_KEY": "your-api-key-here"
      }
    }
  }
}

Herramientas Disponibles

haiku_get_tokens

Obtén tokens admitidos y activos DeFi para trading.

Parámetros:

  • network (opcional): Filtra por ID de cadena (ej., 42161 para Arbitrum)
  • category (opcional): Filtra por categoría de token:
    • token - Tokens estándar (ETH, USDC, etc.)
    • collateral - ej., aTokens de Aave (colateral depositado)
    • varDebt - ej., tokens de deuda variable de Aave
    • vault - ej., bóvedas de rendimiento de Yearn/Morpho
    • weightedLiquidity - ej., tokens LP de Balancer
    • concentratedLiquidity - ej., posiciones LP de Uniswap V3

Ejemplo:

{
  "network": 42161,
  "category": "token"
}

haiku_get_balances

Obtén saldos de tokens para una dirección de billetera en todas las cadenas.

Parámetros:

  • walletAddress (opcional): Dirección de billetera o nombre ENS. Requerido cuando WALLET_PRIVATE_KEY no está configurado; omítelo para derivarlo automáticamente de WALLET_PRIVATE_KEY cuando esté configurado.

Ejemplo:

{
  "walletAddress": "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045"
}

Omite walletAddress cuando WALLET_PRIVATE_KEY esté configurado para usar la dirección derivada.

haiku_get_quote

Obtén una cotización para un swap de tokens o rebalanceo de cartera.

Nota: Las cotizaciones son válidas por 5 minutos, pero ejecuta lo más rápido posible después de cotizar — cuanto más esperes, más probable es que los precios se hayan movido y la transacción falle en cadena.

Parámetros:

  • inputPositions (requerido): Mapa de IID de token a cantidad a gastar
  • targetWeights (requerido): Mapa de IID de token de salida a peso (debe sumar 1)
  • slippage (opcional): Deslizamiento máximo como decimal (predeterminado: 0.003)
  • receiver: Dirección de billetera receptora. Requerido cuando WALLET_PRIVATE_KEY no está configurado — debe proporcionarse explícitamente. Cuando WALLET_PRIVATE_KEY está configurado, se deriva automáticamente si se omite. Cuando WALLET_PRIVATE_KEY no está configurado (Ruta B), debes pasar receiver explícitamente.

Ejemplo:

{
  "inputPositions": {
    "arb:0x82aF49447D8a07e3bd95BD0d56f35241523fBab1": "1.0"
  },
  "targetWeights": {
    "arb:0xaf88d065e77c8cC2239327C5EDb3A432268e5831": 0.5,
    "arb:0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9": 0.5
  },
  "slippage": 0.005
}

El ejemplo anterior omite receiver (válido cuando WALLET_PRIVATE_KEY está configurado). Para la Ruta B, incluye "receiver": "0x...".

haiku_prepare_signatures

Extrae y normaliza payloads de firma EIP-712 de una cotización para firma externa de billetera (solo Ruta B). Al usar quoteId, la cotización debe haberse obtenido en la misma sesión.

Úsalo cuando un MCP de billetera maneje la firma (Coinbase Payments MCP, wallet-agent, AgentKit, Safe, etc.). Devuelve datos tipados estandarizados que cualquier signTypedData de billetera puede consumir, además de instrucciones paso a paso.

Parámetros:

  • quoteId (preferido): ID de cotización de haiku_get_quote — el servidor resuelve la cotización completa desde la caché de sesión. QuoteId solo funciona cuando la cotización fue devuelta por haiku_get_quote en la misma sesión MCP; de lo contrario, usa quoteResponse.
  • quoteResponse (alternativa): Objeto de respuesta completo de haiku_get_quote, si quoteId no está disponible

Devuelve:

  • requiresPermit2: Si se necesita firma Permit2
  • permit2: Payload EIP-712 para pasar a signTypedData (si es requerido)
  • requiresBridgeSignature: Si se necesita firma de puente
  • bridgeIntent: Payload EIP-712 para pasar a signTypedData (si es requerido)
  • sourceChainId: ID de cadena para la transacción
  • instructions: Instrucciones paso a paso para completar el flujo

Ejemplo:

{
  "quoteId": "abc123..."
}

haiku_discover_yields

Descubre oportunidades que generan rendimiento en protocolos DeFi, clasificadas por APY o TVL.

Úsalo para responder preguntas como "mejores rendimientos de préstamos en Arbitrum", "bóvedas con APY más alto con al menos $1M de TVL", o "qué puedo hacer con USDC en Base". El campo iid en los resultados puede usarse directamente como clave en el objeto targetWeights en haiku_get_quote.

Parámetros:

  • network (opcional): Filtra por ID de cadena (ej., 42161 para Arbitrum)
  • category (opcional): lending (colateral de Aave), vault (Yearn/Morpho), lp (Balancer/Uniswap), all (predeterminado)
  • minApy (opcional): APY mínimo como porcentaje (ej., 5 significa ≥5% APY)
  • minTvl (opcional): TVL mínimo en USD (ej., 1000000 significa ≥$1M). Filtra a bóvedas establecidas de mercado masivo.
  • sortBy (opcional): apy (predeterminado) o tvl, descendente
  • limit (opcional): Máximo de resultados (predeterminado 20)

Ejemplo:

{
  "network": 42161,
  "category": "lending",
  "minTvl": 1000000,
  "sortBy": "apy",
  "limit": 10
}

haiku_analyze_portfolio

Analiza la cartera DeFi de una billetera y muestra oportunidades de rendimiento relevantes.

Devuelve posiciones actuales enriquecidas con opciones de APY disponibles, factores de salud de colateral y oportunidades específicas del contexto según lo que la billetera realmente posee. Combínalo con haiku_discover_yields para un contexto de mercado más amplio, luego usa haiku_get_quote para ejecutar.

Parámetros:

  • walletAddress (requerido): Dirección de billetera (0x...) a analizar

Ejemplo:

{
  "walletAddress": "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045"
}

haiku_execute

Ejecuta una cotización. Dos rutas distintas dependiendo de quién tiene la clave privada.

Ruta A — Autónoma (WALLET_PRIVATE_KEY configurado en env): Haiku firma payloads Permit2/puente internamente y transmite. Devuelve un hash de transacción.

Parámetros:

  • quoteId (requerido): ID de cotización de haiku_get_quote
  • sourceChainId (recomendado): ID de cadena de la respuesta de cotización. Omítelo solo si la cotización se obtuvo en la misma sesión — el servidor puede recuperarla de la caché.
  • permit2SigningPayload (opcional): Pasa desde haiku_get_quote si está presente
  • bridgeSigningPayload (opcional): Pasa desde haiku_get_quote si está presente (solo entre cadenas)
  • approvals (opcional): Pasa desde haiku_get_quote si está presente

Ejemplo:

{
  "quoteId": "abc123...",
  "sourceChainId": 42161,
  "permit2SigningPayload": { /* from haiku_get_quote, if present */ },
  "approvals": [ /* from haiku_get_quote, if present */ ]
}

Ruta B — Billetera externa (sin WALLET_PRIVATE_KEY, usando un MCP de billetera): Tú firmas y transmites. broadcast: false es requerido — sin WALLET_PRIVATE_KEY, haiku no puede firmar ni enviar la transacción EVM final. Si llamas a haiku_execute con broadcast: true y sin WALLET_PRIVATE_KEY, el servidor devuelve un error indicándote que configures broadcast: false y transmitas la transacción devuelta a través de tu MCP de billetera.

Antes de llamar a haiku_execute:

  1. Si approvals no está vacío en la cotización: transmite cada aprobación como una transacción { to, data, value } (incluye value cuando esté presente, ej., para token nativo) a través de tu MCP de billetera y espera la confirmación.
  2. Si se requieren firmas: llama a haiku_prepare_signatures con el quoteId, firma los payloads EIP-712 devueltos a través de tu MCP de billetera, luego pasa las firmas aquí.

Parámetros:

  • quoteId (requerido): ID de cotización de haiku_get_quote
  • sourceChainId (recomendado): ID de cadena de la respuesta de cotización. Omítelo solo si la cotización se obtuvo en la misma sesión — el servidor puede recuperarla de la caché.
  • broadcast (requerido): Debe ser false — haiku devuelve la transacción sin firmar para que tú la transmitas
  • permit2Signature (opcional): Firma de firmar el payload Permit2 a través de tu MCP de billetera
  • userSignature (opcional): Firma de firmar el payload de puente a través de tu MCP de billetera (solo entre cadenas)

Ejemplo:

{
  "quoteId": "abc123...",
  "sourceChainId": 42161,
  "broadcast": false,
  "permit2Signature": "0x..."
}

Devuelve { transaction: { to, data, value, chainId } } — pasa transaction al sendTransaction de tu MCP de billetera.

Formato IID de Token

Los tokens se identifican usando el formato IID: chainSlug:tokenAddress

Ejemplos:

  • arb:0x82aF49447D8a07e3bd95BD0d56f35241523fBab1 - WETH en Arbitrum
  • arb:0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee - ETH nativo en Arbitrum
  • base:0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 - USDC en Base

Cadenas Admitidas

CadenaID de CadenaSlug
Arbitrum42161arb
Avalanche43114avax
Base8453base
Berachain80094bera
BNB Smart Chain56bsc
Bob60808bob
Ethereum1eth
Gnosis100gnosis
Hyperliquid999hype
Katana747474katana
Lisk1135lisk
MegaETH4326megaeth
Monad143monad
Optimism10opt
Plasma9745plasma
Polygon137poly
Scroll534352scroll
Sei1329sei
Sonic146sonic
Unichain130uni
World Chain480worldchain
ApeChain33139ape

Ejemplos de Flujo de Trabajo

Ruta A: Swap Autónomo (WALLET_PRIVATE_KEY configurado)

Haiku maneja toda la firma y transmisión. Devuelve un hash de transacción.

1. haiku_get_quote(inputPositions, targetWeights) → returns quoteId, sourceChainId, permit2SigningPayload?, bridgeSigningPayload?, approvals
2. haiku_execute(quoteId, sourceChainId, permit2SigningPayload?, bridgeSigningPayload?, approvals)
   → Haiku broadcasts approvals, signs Permit2/bridge internally, broadcasts swap, returns tx hash

Ruta B: Billetera Externa (el MCP de billetera maneja firma + transmisión)

Úsalo cuando WALLET_PRIVATE_KEY no está configurado y un MCP de billetera separado tiene las claves.

Swap simple (sin firmas Permit2 o de puente necesarias, ej., entrada de ETH nativo):

1. haiku_get_quote(inputPositions, targetWeights, receiver) → returns quoteId, sourceChainId, approvals
2. For each item in approvals: broadcast as transaction { to, data, value } (include value when present) via wallet MCP and wait for confirmation
3. haiku_execute(quoteId, sourceChainId, broadcast: false)
   → returns { transaction: { to, data, value, chainId } }
4. Broadcast transaction via wallet MCP

Con firmas Permit2 o de puente (ej., entrada ERC-20 o swap entre cadenas):

1. haiku_get_quote(inputPositions, targetWeights, receiver) → returns quoteId, sourceChainId, approvals, permit2SigningPayload?, bridgeSigningPayload?
2. For each item in approvals: broadcast as transaction { to, data, value } (include value when present) via wallet MCP and wait for confirmation
3. haiku_prepare_signatures(quoteId) → returns normalized EIP-712 payloads + step-by-step instructions
4. Sign payloads via wallet MCP (e.g. coinbase_sign_typed_data) → get permit2Signature?, userSignature?
5. haiku_execute(quoteId, sourceChainId, permit2Signature?, userSignature?, broadcast: false)
   → returns { transaction: { to, data, value, chainId } }
6. Broadcast transaction via wallet MCP (e.g. coinbase_send_transaction)

Descubrimiento de Rendimientos

1. haiku_discover_yields with category/network/minTvl filters → find opportunities, note iid
2. haiku_get_quote with the chosen iid as a key in targetWeights
3. Execute via Path A or Path B above

Análisis y Optimización de Cartera

1. haiku_analyze_portfolio with wallet address → review positions and opportunities
2. Optionally haiku_discover_yields for broader market context
3. haiku_get_quote to rebalance into higher-yielding positions
4. Execute via Path A or Path B above

Firma de Transacciones

Dos modos dependiendo de tu configuración:

Autónomo (WALLET_PRIVATE_KEY configurado): haiku_execute firma todo internamente y transmite. Devuelve un hash de transacción. No se necesita firma externa.

Billetera externa (sin WALLET_PRIVATE_KEY): Usa haiku_execute con broadcast: false (requerido — haiku no puede firmar ni transmitir sin la clave privada). Si llamas a haiku_execute con broadcast: true y sin WALLET_PRIVATE_KEY, el servidor devuelve un error indicándote que configures broadcast: false y transmitas la transacción devuelta a través de tu MCP de billetera. Devuelve { transaction: { to, data, value, chainId } } para que tu MCP de billetera lo transmita. Si se requieren firmas Permit2 o de puente, llama a haiku_prepare_signatures primero. Si hay aprobaciones en la cotización, transmite cada aprobación { to, data, value } (incluye value cuando esté presente, ej., para token nativo) a través de tu MCP de billetera antes de llamar a haiku_execute.

El diseño de billetera externa permite a los agentes usar cualquier infraestructura de firma (MCPs de billetera, billeteras de hardware, servicios de custodia, MPC, etc.).

Firmas de Puente Entre Cadenas

Para swaps entre cadenas, la cotización puede devolver isComplexBridge: true, indicando que se requiere una firma de intención de puente además de (o en lugar de) Permit2.

Autónomo (Ruta A): Pasa bridgeSigningPayload de la cotización a haiku_execute — maneja la firma de puente internamente.

Billetera externa (Ruta B): Llama a haiku_prepare_signatures con el quoteId — devuelve un payload EIP-712 bridgeIntent normalizado. Fírmalo a través de tu MCP de billetera y pasa el resultado como userSignature a haiku_execute.

Modos de Transporte

Stdio (predeterminado)

Transporte MCP stdio estándar — usado por Claude Desktop, Cursor, etc.

npx haiku-mcp-server

HTTP Transmisible

Transporte HTTP para alojamiento remoto, Smithery y clientes MCP basados en web.

npx haiku-mcp-server --http
npx haiku-mcp-server --http --port=8080

Endpoints:

  • POST /mcp — Endpoint HTTP Streamable de MCP
  • GET /health — Verificación de salud

Desarrollo

# Install dependencies
npm install

# Build
npm run build

# Run locally (stdio, works without API key)
npm start

# Run locally (HTTP)
npm run start:http

# Run with API key for higher rate limits
HAIKU_API_KEY=your-key npm start

Licencia

MIT