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.
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
| Variable | Requerida | Descripción |
|---|---|---|
HAIKU_API_KEY | No | Tu clave API de Haiku para límites de velocidad más altos. Contacta a contact@haiku.trade para solicitar una. |
HAIKU_BASE_URL | No | URL base de la API. Por defecto es https://api.haiku.trade/v1 |
WALLET_PRIVATE_KEY | No | Clave privada (hex 0x) para ejecución autónoma a través de haiku_execute. |
RPC_URL_{chainId} | No | Sobrescribe 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 Aavevault- ej., bóvedas de rendimiento de Yearn/MorphoweightedLiquidity- ej., tokens LP de BalancerconcentratedLiquidity- 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 cuandoWALLET_PRIVATE_KEYno está configurado; omítelo para derivarlo automáticamente deWALLET_PRIVATE_KEYcuando 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 gastartargetWeights(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 cuandoWALLET_PRIVATE_KEYno está configurado — debe proporcionarse explícitamente. CuandoWALLET_PRIVATE_KEYestá configurado, se deriva automáticamente si se omite. CuandoWALLET_PRIVATE_KEYno está configurado (Ruta B), debes pasarreceiverexplí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 dehaiku_get_quote— el servidor resuelve la cotización completa desde la caché de sesión. QuoteId solo funciona cuando la cotización fue devuelta porhaiku_get_quoteen la misma sesión MCP; de lo contrario, usaquoteResponse.quoteResponse(alternativa): Objeto de respuesta completo dehaiku_get_quote, si quoteId no está disponible
Devuelve:
requiresPermit2: Si se necesita firma Permit2permit2: Payload EIP-712 para pasar asignTypedData(si es requerido)requiresBridgeSignature: Si se necesita firma de puentebridgeIntent: Payload EIP-712 para pasar asignTypedData(si es requerido)sourceChainId: ID de cadena para la transaccióninstructions: 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.,5significa ≥5% APY)minTvl(opcional): TVL mínimo en USD (ej.,1000000significa ≥$1M). Filtra a bóvedas establecidas de mercado masivo.sortBy(opcional):apy(predeterminado) otvl, descendentelimit(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 dehaiku_get_quotesourceChainId(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 desdehaiku_get_quotesi está presentebridgeSigningPayload(opcional): Pasa desdehaiku_get_quotesi está presente (solo entre cadenas)approvals(opcional): Pasa desdehaiku_get_quotesi 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:
- Si
approvalsno está vacío en la cotización: transmite cada aprobación como una transacción{ to, data, value }(incluyevaluecuando esté presente, ej., para token nativo) a través de tu MCP de billetera y espera la confirmación. - Si se requieren firmas: llama a
haiku_prepare_signaturescon 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 dehaiku_get_quotesourceChainId(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 serfalse— haiku devuelve la transacción sin firmar para que tú la transmitaspermit2Signature(opcional): Firma de firmar el payload Permit2 a través de tu MCP de billeterauserSignature(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 Arbitrumarb:0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee- ETH nativo en Arbitrumbase:0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913- USDC en Base
Cadenas Admitidas
| Cadena | ID de Cadena | Slug |
|---|---|---|
| Arbitrum | 42161 | arb |
| Avalanche | 43114 | avax |
| Base | 8453 | base |
| Berachain | 80094 | bera |
| BNB Smart Chain | 56 | bsc |
| Bob | 60808 | bob |
| Ethereum | 1 | eth |
| Gnosis | 100 | gnosis |
| Hyperliquid | 999 | hype |
| Katana | 747474 | katana |
| Lisk | 1135 | lisk |
| MegaETH | 4326 | megaeth |
| Monad | 143 | monad |
| Optimism | 10 | opt |
| Plasma | 9745 | plasma |
| Polygon | 137 | poly |
| Scroll | 534352 | scroll |
| Sei | 1329 | sei |
| Sonic | 146 | sonic |
| Unichain | 130 | uni |
| World Chain | 480 | worldchain |
| ApeChain | 33139 | ape |
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 MCPGET /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