Hyperliquid MCP服务器V9
一个全面的MCP服务器,它为Hyperliquid SDK提供了完整的包装器,使AI助手能够与现货和期货市场进行交互,以检索数据、执行交易和管理头寸。
服务介绍
Hyperliquid MCP 服务器 - 完整实现
此MCP(模型上下文协议)服务器为Hyperliquid SDK提供了一个全面的封装,向AI助手暴露了现货和期货市场的全套交易功能。它使AI助手能够与Hyperliquid交易所交互,以检索市场数据、执行交易、管理仓位等。
功能特点
全面的API覆盖
- 对现货和期货交易的Hyperliquid SDK API进行了完整实现
- 市场数据检索(价格、订单簿、K线图)
- 订单下达及管理(市价单、限价单、触发单、TWAP)
- 仓位管理(杠杆、保证金、平仓)
- 账户信息与余额
- 资金费率信息
- 转账与提现
- 金库管理
- 子账户管理
- 推荐系统集成
技术特点
- 使用私钥和钱包地址进行适当的身份验证
- 全面的错误处理和验证
- 实时市场数据访问
- 支持客户端订单ID (cloid) 用于订单追踪
- 支持测试网和主网
已识别的API及其实现
基于对Hyperliquid SDK仓库的彻底检查,我已识别并实现了以下API:
市场数据API
| API | 描述 | 实现 |
|---|---|---|
getAllMids |
获取所有可用加密货币的中间价格 | 直接映射到SDK的info.getAllMids() |
getL2Book |
获取某一符号的订单簿数据 | 直接映射到SDK的info.getL2Book() |
getCandleSnapshot |
获取历史K线数据 | 直接映射到SDK的info.getCandleSnapshot() |
getMetaAndAssetCtxs |
获取永续合约的元数据和资产上下文 | 直接映射到SDK的info.perpetuals.getMetaAndAssetCtxs() |
getSpotMetaAndAssetCtxs |
获取现货市场的元数据和资产上下文 | 直接映射到SDK的info.spot.getSpotMetaAndAssetCtxs() |
账户信息API
由于原文档在此处结束,并未列出具体的账户信息API及其描述,请补充更多详细内容或继续翻译后续部分。如果需要进一步的帮助,请告知!
| API | 描述 | 实现 |
|---|---|---|
getClearinghouseState |
获取永续期货账户状态 | 直接映射到 SDK 的 info.perpetuals.getClearinghouseState() |
getSpotClearinghouseState |
获取现货账户状态 | 直接映射到 SDK 的 info.spot.getSpotClearinghouseState() |
getUserOpenOrders |
获取未完成订单 | 直接映射到 SDK 的 info.getUserOpenOrders() |
getUserFills |
获取成交记录 | 直接映射到 SDK 的 info.getUserFills() |
getUserFillsByTime |
按时间范围获取成交记录 | 直接映射到 SDK 的 info.getUserFillsByTime() |
getUserFunding |
获取资金支付 | 直接映射到 SDK 的 info.perpetuals.getUserFunding() |
getFundingHistory |
获取资金费率历史 | 直接映射到 SDK 的 info.perpetuals.getFundingHistory() |
getPredictedFundings |
获取预测的资金费率 | 直接映射到 SDK 的 info.perpetuals.getPredictedFundings() |
订单管理API
| API | 描述 | 实现 |
|---|---|---|
placeOrder |
下单(市价、限价、触发) | 直接映射到 SDK 的 exchange.placeOrder() |
placeTwapOrder |
下 TWAP 单 | 直接映射到 SDK 的 exchange.placeTwapOrder() |
cancelOrder |
取消订单 | 直接映射到 SDK 的 exchange.cancelOrder() |
cancelOrderByCloid |
通过客户端订单ID取消订单 | 直接映射到 SDK 的 exchange.cancelOrderByCloid() |
cancelTwapOrder |
取消 TWAP 订单 | 直接映射到 SDK 的 exchange.cancelTwapOrder() |
modifyOrder |
修改现有订单 | 直接映射到 SDK 的 exchange.modifyOrder() |
头寸管理API
| API | 描述 | 实现 |
|---|---|---|
updateLeverage |
更新某个交易对的杠杆 | 直接映射到 SDK 的 exchange.updateLeverage() |
updateIsolatedMargin |
更新某个头寸的独立保证金 | 直接映射到 SDK 的 exchange.updateIsolatedMargin() |
marketClose |
以市价单平仓 | 通过 SDK 的 custom.marketClose() 实现 |
closeAllPositions |
关闭所有头寸 | 通过 SDK 的 custom.closeAllPositions() 实现 |
转账和提现API
| API | 描述 | 实现 |
|---|---|---|
usdTransfer |
将 USDC 转账到另一个钱包 | 直接映射到 SDK 的 exchange.usdTransfer() |
initiateWithdrawal |
提现 USDC 到 Arbitrum | 直接映射到 SDK 的 exchange.initiateWithdrawal() |
spotTransfer |
将现货资产转账到另一个钱包 | 直接映射到 SDK 的 exchange.spotTransfer() |
transferBetweenSpotAndPerp |
在现货账户和永续账户之间转账 | 直接映射到 SDK 的 exchange.transferBetweenSpotAndPerp() |
金库管理API
| API | 描述 | 实现 |
|---|---|---|
createVault |
创建一个新的金库 | 直接映射到 SDK 的 exchange.createVault() |
getVaultDetails |
获取金库详情 | 直接映射到 SDK 的 info.getVaultDetails() |
vaultTransfer |
在金库和钱包之间转移资金 | 直接映射到 SDK 的 exchange.vaultTransfer() |
vaultDistribute |
从金库向跟随者分配资金 | 直接映射到 SDK 的 exchange.vaultDistribute() |
vaultModify |
修改金库配置 | 直接映射到 SDK 的 exchange.vaultModify() |
子账户管理 API
| API | 描述 | 实现 |
|---|---|---|
createSubAccount |
创建一个新的子账户 | 直接映射到 SDK 的 exchange.createSubAccount() |
getSubAccounts |
获取所有子账户 | 直接映射到 SDK 的 info.getSubAccounts() |
subAccountTransfer |
在子账户之间转移资金(永续) | 直接映射到 SDK 的 exchange.subAccountTransfer() |
subAccountSpotTransfer |
在子账户之间转移现货资产 | 直接映射到 SDK 的 exchange.subAccountSpotTransfer() |
其他 API
| API | 描述 | 实现 |
|---|---|---|
setReferrer |
设置推荐码 | 直接映射到 SDK 的 exchange.setReferrer() |
referral |
获取推荐信息 | 直接映射到 SDK 的 info.referral() |
setDisplayName |
为排行榜设置显示名称 | 直接映射到 SDK 的 exchange.setDisplayName() |
getUserRole |
获取用户角色 | 直接映射到 SDK 的 info.getUserRole() |
approveAgent |
批准代理代表用户进行交易 | 直接映射到 SDK 的 exchange.approveAgent() |
approveBuilderFee |
批准构建费用 | 直接映射到 SDK 的 exchange.approveBuilderFee() |
认证实现
MCP 服务器使用私钥和钱包地址两种方式进行认证:
-
私钥认证:服务器通过环境变量或配置文件接受一个私钥。该私钥用于签署交易并认证 Hyperliquid API。
-
钱包地址认证:服务器还接受钱包地址,用于只读操作。如果提供了私钥但没有提供钱包地址,服务器将从私钥中派生出钱包地址。
-
金库地址支持:对于金库操作,服务器还支持指定金库地址。
在执行任何需要认证的操作之前,都会进行认证验证,确保用户在尝试执行交易或访问账户信息之前已正确认证。
错误处理和验证
MCP 服务器实现了全面的错误处理和验证:
-
客户端验证:在执行任何操作之前,服务器会验证 Hyperliquid 客户端是否已初始化。
-
身份验证验证:对于需要身份验证的操作,服务器会验证用户是否已正确进行身份验证。
-
参数验证:服务器在将参数传递给 SDK 之前会验证所有参数,确保它们的类型和格式正确。
-
错误处理:服务器捕获并处理来自 SDK 的所有错误,向用户提供清晰的错误信息。
-
日志记录:服务器记录所有操作和错误,便于调试问题。
实现挑战与特别注意事项
1. 市价单实现
Hyperliquid 的 API 没有直接的“市价单”端点。相反,市价单是通过即时或取消(IOC)时间有效的激进限价单来实现的。为了确保执行,我们对当前价格应用了滑点因子:
// 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. 现货市场符号处理
Hyperliquid 中的现货市场符号有一个 "-SPOT" 后缀。MCP 服务器透明地处理这一点,在需要时添加后缀:
// For spot market orders, we need to use the same API endpoint but with the spot symbol
const spotSymbol = `${symbol}-SPOT`;
3. 订单响应解析
从 Hyperliquid API 放置订单的响应格式很复杂,需要仔细解析以提取订单 ID:
// 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. 数值处理
Hyperliquid API 经常将数值作为字符串返回。MCP 服务器将其转换为数字以便更容易使用:
// Convert string values to numbers
const result = {};
for (const [symbol, price] of Object.entries(allMids)) {
result[symbol] = parseFloat(price);
}
5. WebSocket 支持
Hyperliquid SDK 支持 WebSocket 连接以实现实时数据传输。MCP 服务器启用 WebSocket 支持来初始化客户端:
client = new Hyperliquid({
privateKey: config.privateKey,
testnet: config.testnet,
walletAddress: config.walletAddress,
vaultAddress: config.vaultAddress,
enableWs: true
});
先决条件
- Node.js (v14 或更高版本)
- 一个 Hyperliquid 账户
- 用于身份验证的以太坊私钥(交易必需)
- 您的钱包地址(交易必需)
配置
可以通过环境变量或配置文件来配置服务器:
环境变量
HYPERLIQUID_PRIVATE_KEY:您的以太坊私钥用于身份验证(交易必需)HYPERLIQUID_WALLET_ADDRESS:您的钱包地址(交易必需)HYPERLIQUID_VAULT_ADDRESS:您的金库地址(可选,用于金库操作)HYPERLIQUID_TESTNET:设置为 'true' 使用测试网,'false' 使用主网(默认: false)LOG_LEVEL:日志级别 - 'debug', 'info', 'warn', 或 'error'(默认: 'info')
配置文件
您也可以在服务器所在目录下创建一个 .hyperliquid-config.json 文件,其结构如下:
{
"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"]
}
运行服务器
通过运行以下命令启动服务器:
node hyperliquid-mcp-server-complete.js
可用工具
服务器提供了一整套工具用于与 Hyperliquid 交易所交互。这里有一些示例:
市场数据工具
getMarketPrice: 获取指定加密货币的当前价格getOrderBook: 获取指定加密货币的当前订单簿getCandleData: 获取指定加密货币的历史K线数据getAllMids: 获取所有可用加密货币的中间价
账户信息工具
getAccountInfo: 获取用户的永续合约账户信息getSpotAccountInfo: 获取用户的现货交易账户信息getUserOpenOrders: 获取用户的所有未成交订单getUserFills: 获取用户的最近成交记录
订单管理工具
placeMarketOrder: 下达指定加密货币的市价单placeLimitOrder: 下达指定加密货币的限价单placeTriggerOrder: 下达触发订单(止损或止盈)placeTwapOrder: 下达TWAP(时间加权平均价格)订单cancelOrder: 取消现有订单cancelOrderByCloid: 通过客户端订单ID取消订单cancelAllOrders: 取消所有未成交订单modifyOrder: 修改现有订单
头寸管理工具
updateLeverage: 更新指定加密货币的杠杆updateIsolatedMargin: 更新仓位的隔离保证金closePosition: 平仓closeAllPositions: 平掉所有仓位
转账和提现工具
usdTransfer: 将USDC转账到另一个钱包initiateWithdrawal: 提现USDC到ArbitrumspotTransfer: 将现货资产转移到另一个钱包transferBetweenSpotAndPerp: 在现货账户与永续账户之间转移资金
金库管理工具
createVault: 创建一个新的金库getVaultDetails: 获取金库详情vaultTransfer: 在金库与永续期货钱包之间转移资金vaultDistribute: 从金库向跟随者分配资金vaultModify: 修改金库配置
子账户管理工具
createSubAccount: 创建一个新的子账户getSubAccounts: 获取用户的所有子账户subAccountTransfer: 在子账户(永续)之间转移资金subAccountSpotTransfer: 在子账户之间转移现货资产
可用资源
服务器提供以下资源:
market-data: 永续期货市场中热门加密货币的市场数据account-info: 包括余额和仓位在内的永续期货账户信息spot-market-data: 现货市场中热门加密货币的市场数据spot-account-info: 包括余额在内的现货交易账户信息open-orders: 用户的所有未成交订单positions: 用户的所有未平仓位funding-rates: 所有加密货币的当前资金费率
安全注意事项
- 私钥安全:您的以太坊私钥提供了对您资金的完全访问权限。切勿分享或在公开仓库中暴露它。
- 先使用测试网:在主网上使用真实资金之前,务必先在测试网上测试您的设置。
- 限制访问:仅允许受信任的人工智能助手和应用程序访问MCP服务器。
免责声明
交易加密货币涉及重大风险。此工具仅用于教育和信息目的。在进行交易前,请务必了解所涉及的风险,并且永远不要用您无法承受损失的资金进行交易。