区块链交易执行服务器

Haiku MCP Server是一个模型上下文协议服务器,通过Haiku API使AI代理能够执行区块链交易,支持代币发现、余额检查、交易报价等功能。

  • by Haiku-Trading
  • TypeScript
  • 本地部署
  • 2 星标
  • 更新于
在 GitHub 查看 Haiku-Trading/haiku-mcp-server

使用说明

Haiku MCP服务器

MCP(模型上下文协议)服务器,使AI代理能够通过 Haiku API.

特性

  • 令牌发现:列出21个区块链网络中支持的代币和DeFi资产
  • 余额检查:获取所有支持链的钱包余额
  • 交易报价:获取掉期和投资组合再平衡的报价
  • 交易大楼:将报价转换为未签名的EVM交易
  • 钱包集成:提取EIP-712有效载荷用于外部钱包签名(Coinbase、AgentKit、Safe等)
  • 独立执行:使用WALLET_PRIVATE_KEY环境变量进行可选的端到端执行
  • 产量发现:按APY、TVL和类别筛选,找到跨协议和链的最高收益DeFi机会
  • 投资组合分析:根据钱包的实际持有量分析钱包的持有量和特定背景的收益机会

安装

npm install haiku-mcp-server

或者直接使用npx运行:

npx haiku-mcp-server

配置

环境变量

变量 必填 描述
HAIKU_API_KEY 否 您的Haiku API键用于更高的费率限制。联系contact@haiku.trade请求一个。
HAIKU_BASE_URL 没有 API基URL。默认为 https://api.haiku.trade/v1
WALLET_PRIVATE_KEY 否 通过自包含执行的私钥(0x十六进制) haiku_execute.
RPC_URL_{chainId} 否 覆盖特定链的RPC URL(例如。, RPC_URL_42161 Arbitrum)。

注: API在没有密钥的情况下工作,但提供密钥可以解锁更高的生产使用速率限制。

Claude桌面配置

添加到您的 claude_desktop_config.json:

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

API键用于更高的速率限制:

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

可用工具

haiku_get_tokens

获取支持的代币和DeFi资产进行交易。

参数:

  • network (可选):按链ID筛选(例如,Arbitrum为42161)
  • category (可选):按令牌类别筛选:
    • token -香草代币(ETH、USDC等)
    • collateral -例如,Aave a代币(存款抵押品)
    • varDebt -例如,五种可变债务代币
    • vault -例如,Yearn/Morpho收益库
    • weightedLiquidity -例如,平衡器LP令牌
    • concentratedLiquidity -例如,Uniswap V3 LP头寸

例子:

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

haiku_get_balances

获取所有链上钱包地址的代币余额。

参数:

  • walletAddress (可选):钱包地址或ENS名称。需要时 WALLET_PRIVATE_KEY 未设置;省略自动推导 WALLET_PRIVATE_KEY 当它被设置时。

例子:

{
  "walletAddress": "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045"
}

省略 walletAddress 当 WALLET_PRIVATE_KEY 设置为使用导出的地址。

haiku_get_quote

获取代币互换或投资组合再平衡的报价。

注: 报价有效期为5分钟,但在报价后应尽快执行——等待的时间越长,价格变动的可能性就越大,交易在链上失败的可能性也就越大。

参数:

  • inputPositions (必填):代币IID与支出金额的映射
  • targetWeights (必填):输出令牌IID与权重的映射(必须总和为1)
  • slippage (可选):最大滑点为小数(默认值:0.003)
  • receiver:接收钱包地址。 需要时 WALLET_PRIVATE_KEY 未设置 --必须明确提供。当 WALLET_PRIVATE_KEY 如果省略,则自动导出。当 WALLET_PRIVATE_KEY 未设置(路径B),您必须通过 receiver 明确地。

例子:

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

上述示例省略 receiver (有效期为 WALLET_PRIVATE_KEY 已设置)。对于路径B,包括 "receiver": "0x...".

haiku_prepare_signatures

从外部钱包签名的报价中提取并规范EIP-712签名有效载荷(仅路径B)。使用时 quoteId,报价必须是在同一会话中获得的。

当钱包MCP处理签名时使用此功能(Coinbase Payments MCP、钱包代理、AgentKit、Safe等)。返回任何钱包的标准化键入数据 signTypedData 可以消费,加上分步说明。

参数:

  • quoteId (首选):报价ID来自 haiku_get_quote --服务器解析会话缓存中的完整报价。QuoteId仅在以下人员返回报价时有效 haiku_get_quote 在同一MCP会话中;否则使用 quoteResponse.
  • quoteResponse (回退):来自的完整响应对象 haiku_get_quote,如果quoteId不可用

退货:

  • requiresPermit2:是否需要Permit2签名
  • permit2:要传递的EIP-712有效载荷 signTypedData (如果需要)
  • requiresBridgeSignature:是否需要桥接签名
  • bridgeIntent:要传递的EIP-712有效载荷 signTypedData (如果需要)
  • sourceChainId:交易的链ID
  • instructions:完成流程的分步说明

例子:

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

haiku_discover_yields

发现跨DeFi协议的收益机会,按APY或TVL排名。

用它来回答诸如“Arbitrum的最佳贷款收益率”、“最高APY金库”等问题 至少有100万美元的TVL”,或者“我能在基础上用USDC做什么” iid 结果中的字段 可以直接用作 targetWeights 对象在 haiku_get_quote.

参数:

  • network (可选):按链ID筛选(例如,Arbitrum为42161)
  • category (可选): lending (有抵押品), vault (Yearn/Morpho), lp (平衡器/Uniswap), all (默认)
  • minApy (可选):最小APY百分比(例如。, 5 指APY≥5%)
  • minTvl (可选):最低TVL(美元)(例如。, 1000000 指≥100万美元)。过滤到已建立的主流保险库。
  • sortBy (可选): apy (默认)或 tvl,下降
  • limit (可选):最大结果(默认值20)

例子:

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

haiku_analyze_portfolio

分析钱包的DeFi投资组合,并揭示相关的收益机会。

返回当前头寸,其中包含可用的APY选项、附带健康因素、, 以及基于钱包实际持有的内容的特定情境机会。配对 haiku_discover_yields 对于更广泛的市场背景,然后使用 haiku_get_quote 执行。

参数:

  • walletAddress (必填):要分析的钱包地址(0x…)

例子:

{
  "walletAddress": "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045"
}

haiku_execute

执行报价。取决于谁持有私钥,有两条不同的路径。

路径A——自给自足 (WALLET_PRIVATE_KEY 在env中设置):Haiku在内部签署Permit2/bridge有效载荷并广播。返回一个tx哈希值。

参数:

  • quoteId (必填):报价ID来自 haiku_get_quote
  • sourceChainId (推荐):报价响应中的链ID。仅当报价是在同一会话中获得时才省略——服务器可以从缓存中恢复。
  • permit2SigningPayload (可选):从 haiku_get_quote 如存在
  • bridgeSigningPayload (可选):从 haiku_get_quote 如果存在(仅跨链)
  • approvals (可选):从 haiku_get_quote 如存在

例子:

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

路径B——外部钱包 (没有 WALLET_PRIVATE_KEY,使用钱包MCP):您签名并广播。 broadcast: false 是 必需的 --没有 WALLET_PRIVATE_KEY,俳句无法签署或发送最终的EVM交易。如果你打电话 haiku_execute 和 broadcast: true 而没有 WALLET_PRIVATE_KEY,服务器返回一个错误,指示您进行设置 broadcast: false 并通过您的钱包MCP广播返回的交易。

打电话之前 haiku_execute:

  1. 如果 approvals 报价中非空:将每个审批作为交易进行广播 { to, data, value } (包括 value 当存在时,例如用于本地令牌)通过您的钱包MCP并等待确认。
  2. 如果需要签名:致电 haiku_prepare_signatures 使用quoteId,通过您的钱包MCP对返回的EIP-712有效载荷进行签名,然后在此处传递签名。

参数:

  • quoteId (必填):报价ID来自 haiku_get_quote
  • sourceChainId (推荐):报价响应中的链ID。仅当报价是在同一会话中获得时才省略——服务器可以从缓存中恢复。
  • broadcast (必填):必须 false --俳句返回未签名的tx供您播放
  • permit2Signature (可选):通过您的钱包MCP签署Permit2有效载荷后签名
  • userSignature (可选):通过您的钱包MCP签署网桥有效载荷的签名(仅限跨链)

例子:

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

退货 { transaction: { to, data, value, chainId } } --通行证 transaction 到您的MCP钱包 sendTransaction.

令牌IID格式

令牌使用IID格式标识: chainSlug:tokenAddress

示例:

  • arb:0x82aF49447D8a07e3bd95BD0d56f35241523fBab1 -韦思在Arbitrum
  • arb:0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee -Arbitrum上的原生ETH
  • base:0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 -USDC基准

支撑链

链 链ID 蛞蝓
仲裁 42161 仲裁
雪崩 43114 avax
基数 8453 基数
贝拉钦 80094 贝拉
BNB智能链 56 bsc
鲍勃 60808 鲍勃
以太坊 1 eth
灵知 100 灵知
超级液体 999 炒作
卡塔纳 747474 卡塔纳
利斯克 1135 尖塔
MegaETH 4326 megaeth
蒙纳德 143 蒙纳德
乐观主义 10 opt
血浆 9745 血浆
多边形 137 多边形
滚动 534352 滚动
西 1329 西
音速 146 音速
单链 130 uni
世界链 480 世界链
猿链 33139 猿

工作流示例

路径A:自包含交换(WALLET_PRIVATE_KEY集)

俳句负责所有的签约和转播。返回一个tx哈希值。

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

路径B:外部钱包(钱包MCP处理签名+广播)

当未设置WALLET_PRIVATE_KEY并且单独的钱包MCP持有密钥时使用。

简单交换(无需Permit2或网桥签名,例如本地ETH输入):

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

使用Permit2或桥接签名(例如ERC-20输入或跨链交换):

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)

产量发现

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

投资组合分析与优化

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

交易签名

根据您的设置,有两种模式:

自足 (WALLET_PRIVATE_KEY 设置): haiku_execute 在内部签署所有内容并广播。返回一个tx哈希值。无需外部签名。

外部钱包 (没有 WALLET_PRIVATE_KEY):使用 haiku_execute 和 broadcast: false (必填——没有私钥,俳句无法签名或广播)。如果你打电话 haiku_execute 和 broadcast: true 而没有 WALLET_PRIVATE_KEY,服务器返回一个错误,指示您进行设置 broadcast: false 并通过您的钱包MCP广播返回的交易。退货 { transaction: { to, data, value, chainId } } 让您的钱包MCP进行广播。如果需要Permit2或网桥签名,请致电 haiku_prepare_signatures 第一。如果报价中有批准,则广播每个批准 { to, data, value } (包括 value 当存在时,例如用于本地令牌),在调用之前通过您的钱包MCP haiku_execute.

外部钱包设计允许代理使用任何签名基础设施(钱包MCP、硬件钱包、托管服务、MPC等)。

跨链桥梁签名

对于跨链掉期,报价可能会返回 isComplexBridge: true,表示除了(或代替)许可2外,还需要桥梁意图签名。

自给自足(路径A): 通过 bridgeSigningPayload 从引用到 haiku_execute --它在内部处理桥签名。

外部钱包(路径B): 呼叫 haiku_prepare_signatures 对于quoteId,它返回一个归一化的 bridgeIntent EIP-712有效载荷。通过您的钱包MCP签名,并将结果作为 userSignature 到 haiku_execute.

运输方式

标准(默认)

标准MCP stdio传输——由Claude Desktop、Cursor等使用。

npx haiku-mcp-server

可流式传输的HTTP

用于远程托管、Smithery和基于web的MCP客户端的HTTP传输。

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

终点:

  • POST /mcp --MCP可流式HTTP端点
  • GET /health --健康检查

发展

# 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

许可证

麻省理工学院