@continuumdao/ctm-mpc-defi 0.2.8 → 0.2.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent/catalog.cjs +1133 -2
- package/dist/agent/catalog.cjs.map +1 -1
- package/dist/agent/catalog.d.ts +1268 -9
- package/dist/agent/catalog.js +1091 -3
- package/dist/agent/catalog.js.map +1 -1
- package/dist/agent/skills/hyperliquid/SKILL.md +205 -0
- package/dist/agent/skills/morpho/SKILL.md +48 -0
- package/dist/core/index.cjs +9 -0
- package/dist/core/index.cjs.map +1 -1
- package/dist/core/index.d.ts +3 -1
- package/dist/core/index.js +8 -1
- package/dist/core/index.js.map +1 -1
- package/dist/index.cjs +9 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +8 -1
- package/dist/index.js.map +1 -1
- package/dist/protocols/evm/aave-v4/index.cjs.map +1 -1
- package/dist/protocols/evm/aave-v4/index.js.map +1 -1
- package/dist/protocols/evm/euler-v2/index.cjs.map +1 -1
- package/dist/protocols/evm/euler-v2/index.js.map +1 -1
- package/dist/protocols/evm/hyperliquid/index.cjs +1550 -0
- package/dist/protocols/evm/hyperliquid/index.cjs.map +1 -0
- package/dist/protocols/evm/hyperliquid/index.d.ts +668 -0
- package/dist/protocols/evm/hyperliquid/index.js +1464 -0
- package/dist/protocols/evm/hyperliquid/index.js.map +1 -0
- package/dist/protocols/evm/maple/index.cjs.map +1 -1
- package/dist/protocols/evm/maple/index.js.map +1 -1
- package/dist/protocols/evm/morpho/index.cjs +1971 -0
- package/dist/protocols/evm/morpho/index.cjs.map +1 -0
- package/dist/protocols/evm/morpho/index.d.ts +522 -0
- package/dist/protocols/evm/morpho/index.js +1918 -0
- package/dist/protocols/evm/morpho/index.js.map +1 -0
- package/dist/protocols/evm/sky/index.cjs.map +1 -1
- package/dist/protocols/evm/sky/index.js.map +1 -1
- package/package.json +11 -1
package/dist/agent/catalog.js
CHANGED
|
@@ -924,6 +924,74 @@ var mcpEulerV2CollateralWithdrawInputSchema = mcpMultisignInput({
|
|
|
924
924
|
collateralAsset: evmAddressSchema,
|
|
925
925
|
amountHuman: z.string().min(1)
|
|
926
926
|
});
|
|
927
|
+
var mcpMorphoVaultDepositInputSchema = mcpMultisignInput({
|
|
928
|
+
vault: evmAddressSchema,
|
|
929
|
+
underlying: evmAddressSchema.describe("Underlying asset; use wrapped native with isNativeIn for ETH."),
|
|
930
|
+
amountHuman: z.string().min(1),
|
|
931
|
+
isNativeIn: z.boolean().optional()
|
|
932
|
+
});
|
|
933
|
+
var mcpMorphoVaultWithdrawInputSchema = mcpMultisignInput({
|
|
934
|
+
vault: evmAddressSchema,
|
|
935
|
+
amountHuman: z.string().min(1)
|
|
936
|
+
});
|
|
937
|
+
var mcpMorphoBlueCollateralDepositInputSchema = mcpMultisignInput({
|
|
938
|
+
marketId: z.string().min(1).describe("Morpho Blue marketId from API."),
|
|
939
|
+
collateralToken: evmAddressSchema,
|
|
940
|
+
amountHuman: z.string().min(1),
|
|
941
|
+
isNativeIn: z.boolean().optional()
|
|
942
|
+
});
|
|
943
|
+
var mcpMorphoBlueBorrowInputSchema = mcpMultisignInput({
|
|
944
|
+
marketId: z.string().min(1),
|
|
945
|
+
loanToken: evmAddressSchema,
|
|
946
|
+
amountHuman: z.string().min(1)
|
|
947
|
+
});
|
|
948
|
+
var mcpMorphoBlueRepayInputSchema = mcpMultisignInput({
|
|
949
|
+
marketId: z.string().min(1),
|
|
950
|
+
loanToken: evmAddressSchema,
|
|
951
|
+
amountHuman: z.string().min(1)
|
|
952
|
+
});
|
|
953
|
+
var mcpMorphoBlueCollateralWithdrawInputSchema = mcpMultisignInput({
|
|
954
|
+
marketId: z.string().min(1),
|
|
955
|
+
amountHuman: z.string().min(1),
|
|
956
|
+
collateralDecimals: z.number().int().min(0).max(36).optional()
|
|
957
|
+
});
|
|
958
|
+
var mcpMorphoMerklClaimInputSchema = mcpMultisignInput({
|
|
959
|
+
claimData: z.string().min(1).describe("Hex calldata for Merkl Distributor.claim from Merkl API."),
|
|
960
|
+
distributor: evmAddressSchema.optional(),
|
|
961
|
+
valueWei: z.string().optional()
|
|
962
|
+
});
|
|
963
|
+
var morphoExposureRowSchema = z.object({
|
|
964
|
+
label: z.string(),
|
|
965
|
+
allocatedUsdLabel: z.string(),
|
|
966
|
+
allocationPercentLabel: z.string()
|
|
967
|
+
});
|
|
968
|
+
var mcpMorphoFetchEarnVaultsInputSchema = z.object({
|
|
969
|
+
chainId: z.number().int().positive(),
|
|
970
|
+
underlying: z.string().trim().min(1).optional().describe("Deposit asset symbol (e.g. USDC) or ERC-20 address. Omit to search all listed vaults on the chain."),
|
|
971
|
+
query: z.string().trim().min(1).optional().describe("Case-insensitive filter on vault name, symbol, address, or underlying symbol (e.g. Steakhouse, bbqUSDC)."),
|
|
972
|
+
limit: z.number().int().min(1).max(200).optional().describe("Max rows (default 50).")
|
|
973
|
+
});
|
|
974
|
+
var mcpMorphoFetchEarnVaultsOutputSchema = z.object({
|
|
975
|
+
vaults: z.array(
|
|
976
|
+
z.object({
|
|
977
|
+
vaultAddress: z.string(),
|
|
978
|
+
vaultName: z.string(),
|
|
979
|
+
vaultSymbol: z.string(),
|
|
980
|
+
underlyingAddress: z.string(),
|
|
981
|
+
underlyingSymbol: z.string(),
|
|
982
|
+
apy: z.string(),
|
|
983
|
+
netApy: z.string(),
|
|
984
|
+
netApy7d: z.string(),
|
|
985
|
+
netApy30d: z.string(),
|
|
986
|
+
netApy90d: z.string(),
|
|
987
|
+
performanceFee: z.string(),
|
|
988
|
+
managementFee: z.string().nullable(),
|
|
989
|
+
totalDepositsUsd: z.string(),
|
|
990
|
+
liquidityUsd: z.string(),
|
|
991
|
+
exposure: z.array(morphoExposureRowSchema)
|
|
992
|
+
})
|
|
993
|
+
)
|
|
994
|
+
});
|
|
927
995
|
function mcpGmxMultisignInput(fields) {
|
|
928
996
|
return evmMultisignCommonInputSchema.extend(fields);
|
|
929
997
|
}
|
|
@@ -1072,6 +1140,311 @@ var mcpGmxFetchOhlcvOutputSchema = z.object({
|
|
|
1072
1140
|
timeframe: gmxOhlcvTimeframeSchema,
|
|
1073
1141
|
candles: z.array(gmxOhlcvCandleSchema)
|
|
1074
1142
|
});
|
|
1143
|
+
function mcpHyperliquidMultisignInput(fields) {
|
|
1144
|
+
return evmMultisignCommonInputSchema.extend(fields);
|
|
1145
|
+
}
|
|
1146
|
+
var hyperliquidTifSchema = z.enum(["alo", "gtc", "ioc"]);
|
|
1147
|
+
var hyperliquidOhlcvIntervalSchema = z.enum([
|
|
1148
|
+
"1m",
|
|
1149
|
+
"3m",
|
|
1150
|
+
"5m",
|
|
1151
|
+
"15m",
|
|
1152
|
+
"30m",
|
|
1153
|
+
"1h",
|
|
1154
|
+
"2h",
|
|
1155
|
+
"4h",
|
|
1156
|
+
"8h",
|
|
1157
|
+
"12h",
|
|
1158
|
+
"1d",
|
|
1159
|
+
"3d",
|
|
1160
|
+
"1w",
|
|
1161
|
+
"1M"
|
|
1162
|
+
]);
|
|
1163
|
+
var hyperliquidPositionRowSchema = z.object({
|
|
1164
|
+
key: z.string(),
|
|
1165
|
+
coin: z.string(),
|
|
1166
|
+
isLong: z.boolean(),
|
|
1167
|
+
size: z.string().nullable(),
|
|
1168
|
+
entryPx: z.string().nullable(),
|
|
1169
|
+
positionValueUsd: z.string().nullable(),
|
|
1170
|
+
unrealizedPnlUsd: z.string().nullable(),
|
|
1171
|
+
liquidationPx: z.string().nullable(),
|
|
1172
|
+
leverageLabel: z.string().nullable(),
|
|
1173
|
+
maxLeverage: z.number().nullable(),
|
|
1174
|
+
marginUsedUsd: z.string().nullable(),
|
|
1175
|
+
returnOnEquity: z.string().nullable()
|
|
1176
|
+
});
|
|
1177
|
+
var hyperliquidActiveAssetSchema = z.object({
|
|
1178
|
+
markPx: z.string().nullable(),
|
|
1179
|
+
leverageLabel: z.string().nullable(),
|
|
1180
|
+
availableToBuy: z.string().nullable(),
|
|
1181
|
+
availableToSell: z.string().nullable()
|
|
1182
|
+
});
|
|
1183
|
+
var hyperliquidAccountSummarySchema = z.object({
|
|
1184
|
+
accountValueUsd: z.string().nullable(),
|
|
1185
|
+
totalMarginUsedUsd: z.string().nullable(),
|
|
1186
|
+
withdrawableUsd: z.string().nullable()
|
|
1187
|
+
});
|
|
1188
|
+
var mcpHyperliquidFetchMarketsInputSchema = z.object({
|
|
1189
|
+
chainId: z.number().int().positive(),
|
|
1190
|
+
dex: z.string().optional()
|
|
1191
|
+
});
|
|
1192
|
+
var mcpHyperliquidFetchMarketsOutputSchema = z.object({
|
|
1193
|
+
markets: z.array(
|
|
1194
|
+
z.object({
|
|
1195
|
+
name: z.string(),
|
|
1196
|
+
asset: z.number(),
|
|
1197
|
+
szDecimals: z.number(),
|
|
1198
|
+
maxLeverage: z.number(),
|
|
1199
|
+
onlyIsolated: z.boolean().optional(),
|
|
1200
|
+
dex: z.string().optional()
|
|
1201
|
+
})
|
|
1202
|
+
),
|
|
1203
|
+
dexes: z.array(
|
|
1204
|
+
z.object({
|
|
1205
|
+
name: z.string(),
|
|
1206
|
+
fullName: z.string()
|
|
1207
|
+
})
|
|
1208
|
+
)
|
|
1209
|
+
});
|
|
1210
|
+
var mcpHyperliquidSearchMarketsInputSchema = z.object({
|
|
1211
|
+
chainId: z.number().int().positive(),
|
|
1212
|
+
query: z.string().min(1),
|
|
1213
|
+
dex: z.string().optional(),
|
|
1214
|
+
limit: z.number().int().positive().max(50).optional()
|
|
1215
|
+
});
|
|
1216
|
+
var mcpHyperliquidSearchMarketsOutputSchema = z.object({
|
|
1217
|
+
matches: z.array(
|
|
1218
|
+
z.object({
|
|
1219
|
+
coin: z.string(),
|
|
1220
|
+
symbol: z.string(),
|
|
1221
|
+
dex: z.string().optional(),
|
|
1222
|
+
asset: z.number(),
|
|
1223
|
+
szDecimals: z.number(),
|
|
1224
|
+
maxLeverage: z.number(),
|
|
1225
|
+
onlyIsolated: z.boolean().optional(),
|
|
1226
|
+
displayName: z.string().optional(),
|
|
1227
|
+
category: z.string().optional(),
|
|
1228
|
+
keywords: z.array(z.string()).optional(),
|
|
1229
|
+
matchScore: z.number(),
|
|
1230
|
+
matchReason: z.string()
|
|
1231
|
+
})
|
|
1232
|
+
)
|
|
1233
|
+
});
|
|
1234
|
+
var mcpHyperliquidFetchOpenContextInputSchema = z.object({
|
|
1235
|
+
chainId: z.number().int().positive(),
|
|
1236
|
+
executorAddress: evmAddressSchema,
|
|
1237
|
+
coin: z.string().min(1),
|
|
1238
|
+
dex: z.string().optional()
|
|
1239
|
+
});
|
|
1240
|
+
var mcpHyperliquidFetchOpenContextOutputSchema = z.object({
|
|
1241
|
+
context: z.object({
|
|
1242
|
+
account: hyperliquidAccountSummarySchema,
|
|
1243
|
+
activeAsset: hyperliquidActiveAssetSchema
|
|
1244
|
+
})
|
|
1245
|
+
});
|
|
1246
|
+
var mcpHyperliquidFetchPositionsInputSchema = z.object({
|
|
1247
|
+
chainId: z.number().int().positive(),
|
|
1248
|
+
executorAddress: evmAddressSchema,
|
|
1249
|
+
dex: z.string().optional()
|
|
1250
|
+
});
|
|
1251
|
+
var mcpHyperliquidFetchPositionsOutputSchema = z.object({
|
|
1252
|
+
positions: z.array(hyperliquidPositionRowSchema)
|
|
1253
|
+
});
|
|
1254
|
+
var mcpHyperliquidFetchOpenOrdersInputSchema = z.object({
|
|
1255
|
+
chainId: z.number().int().positive(),
|
|
1256
|
+
executorAddress: evmAddressSchema,
|
|
1257
|
+
dex: z.string().optional()
|
|
1258
|
+
});
|
|
1259
|
+
var mcpHyperliquidFetchOpenOrdersOutputSchema = z.object({
|
|
1260
|
+
orders: z.array(
|
|
1261
|
+
z.object({
|
|
1262
|
+
coin: z.string(),
|
|
1263
|
+
side: z.string(),
|
|
1264
|
+
limitPx: z.string(),
|
|
1265
|
+
sz: z.string(),
|
|
1266
|
+
oid: z.number(),
|
|
1267
|
+
timestamp: z.number(),
|
|
1268
|
+
reduceOnly: z.boolean().optional()
|
|
1269
|
+
})
|
|
1270
|
+
)
|
|
1271
|
+
});
|
|
1272
|
+
var mcpHyperliquidFetchMarketSnapshotInputSchema = z.object({
|
|
1273
|
+
chainId: z.number().int().positive(),
|
|
1274
|
+
coin: z.string().min(1),
|
|
1275
|
+
interval: hyperliquidOhlcvIntervalSchema.optional(),
|
|
1276
|
+
dex: z.string().optional(),
|
|
1277
|
+
/** Recent OHLCV bars to return (default 48, max 200). Live price is always current. */
|
|
1278
|
+
candleLimit: z.number().int().positive().max(200).optional()
|
|
1279
|
+
});
|
|
1280
|
+
var hyperliquidOhlcvCandleSchema = z.object({
|
|
1281
|
+
timestampMs: z.number(),
|
|
1282
|
+
open: z.string(),
|
|
1283
|
+
high: z.string(),
|
|
1284
|
+
low: z.string(),
|
|
1285
|
+
close: z.string(),
|
|
1286
|
+
volume: z.string()
|
|
1287
|
+
});
|
|
1288
|
+
var hyperliquidLivePriceSchema = z.object({
|
|
1289
|
+
markPx: z.string().nullable(),
|
|
1290
|
+
midPx: z.string().nullable(),
|
|
1291
|
+
oraclePx: z.string().nullable(),
|
|
1292
|
+
prevDayPx: z.string().nullable(),
|
|
1293
|
+
midUsd: z.string(),
|
|
1294
|
+
source: z.enum(["midPx", "markPx", "allMids"])
|
|
1295
|
+
});
|
|
1296
|
+
var mcpHyperliquidFetchMarketSnapshotOutputSchema = z.object({
|
|
1297
|
+
snapshot: z.object({
|
|
1298
|
+
coin: z.string(),
|
|
1299
|
+
dex: z.string().nullable(),
|
|
1300
|
+
livePrice: hyperliquidLivePriceSchema,
|
|
1301
|
+
midUsd: z.string(),
|
|
1302
|
+
fetchedAtMs: z.number(),
|
|
1303
|
+
interval: hyperliquidOhlcvIntervalSchema,
|
|
1304
|
+
latestCandle: hyperliquidOhlcvCandleSchema.nullable(),
|
|
1305
|
+
candles: z.array(hyperliquidOhlcvCandleSchema),
|
|
1306
|
+
candleCount: z.number()
|
|
1307
|
+
}),
|
|
1308
|
+
resolvedCoin: z.string(),
|
|
1309
|
+
dex: z.string().nullable()
|
|
1310
|
+
});
|
|
1311
|
+
var mcpHyperliquidFetchOhlcvInputSchema = z.object({
|
|
1312
|
+
chainId: z.number().int().positive(),
|
|
1313
|
+
coin: z.string().min(1),
|
|
1314
|
+
interval: hyperliquidOhlcvIntervalSchema.optional(),
|
|
1315
|
+
dex: z.string().optional(),
|
|
1316
|
+
/** Calendar-day lookback ending now (e.g. 7 = last week). Preferred for agent requests. */
|
|
1317
|
+
lookbackDays: z.number().positive().max(90).optional(),
|
|
1318
|
+
/** Hour lookback ending now. Alternative to lookbackDays. */
|
|
1319
|
+
lookbackHours: z.number().positive().max(90 * 24).optional(),
|
|
1320
|
+
/** Explicit range start (ms since epoch). Use with endTimeMs. */
|
|
1321
|
+
startTimeMs: z.number().int().positive().optional(),
|
|
1322
|
+
/** Explicit range end (ms since epoch). Defaults to now. */
|
|
1323
|
+
endTimeMs: z.number().int().positive().optional()
|
|
1324
|
+
});
|
|
1325
|
+
var mcpHyperliquidFetchOhlcvOutputSchema = z.object({
|
|
1326
|
+
ohlcv: z.object({
|
|
1327
|
+
coin: z.string(),
|
|
1328
|
+
dex: z.string().nullable(),
|
|
1329
|
+
interval: hyperliquidOhlcvIntervalSchema,
|
|
1330
|
+
startTimeMs: z.number(),
|
|
1331
|
+
endTimeMs: z.number(),
|
|
1332
|
+
expectedBars: z.number(),
|
|
1333
|
+
candleCount: z.number(),
|
|
1334
|
+
latestCandle: hyperliquidOhlcvCandleSchema.nullable(),
|
|
1335
|
+
candles: z.array(hyperliquidOhlcvCandleSchema),
|
|
1336
|
+
fetchedAtMs: z.number()
|
|
1337
|
+
}),
|
|
1338
|
+
resolvedCoin: z.string(),
|
|
1339
|
+
dex: z.string().nullable()
|
|
1340
|
+
});
|
|
1341
|
+
var mcpHyperliquidFetchUsdClassBalancesInputSchema = z.object({
|
|
1342
|
+
chainId: z.number().int().positive(),
|
|
1343
|
+
executorAddress: evmAddressSchema
|
|
1344
|
+
});
|
|
1345
|
+
var mcpHyperliquidFetchUsdClassBalancesOutputSchema = z.object({
|
|
1346
|
+
balances: z.object({
|
|
1347
|
+
spotUsdcAvailable: z.string(),
|
|
1348
|
+
perpWithdrawable: z.string()
|
|
1349
|
+
})
|
|
1350
|
+
});
|
|
1351
|
+
var mcpHyperliquidFetchVaultsInputSchema = z.object({
|
|
1352
|
+
chainId: z.number().int().positive(),
|
|
1353
|
+
executorAddress: evmAddressSchema.optional()
|
|
1354
|
+
});
|
|
1355
|
+
var mcpHyperliquidFetchVaultsOutputSchema = z.object({
|
|
1356
|
+
vaults: z.array(
|
|
1357
|
+
z.object({
|
|
1358
|
+
vaultAddress: z.string(),
|
|
1359
|
+
name: z.string(),
|
|
1360
|
+
apr: z.number().nullable(),
|
|
1361
|
+
tvlUsd: z.string().nullable()
|
|
1362
|
+
})
|
|
1363
|
+
)
|
|
1364
|
+
});
|
|
1365
|
+
var mcpHyperliquidFetchUserVaultEquitiesInputSchema = z.object({
|
|
1366
|
+
chainId: z.number().int().positive(),
|
|
1367
|
+
executorAddress: evmAddressSchema
|
|
1368
|
+
});
|
|
1369
|
+
var mcpHyperliquidFetchUserVaultEquitiesOutputSchema = z.object({
|
|
1370
|
+
rows: z.array(
|
|
1371
|
+
z.object({
|
|
1372
|
+
vaultAddress: z.string(),
|
|
1373
|
+
equity: z.string()
|
|
1374
|
+
})
|
|
1375
|
+
)
|
|
1376
|
+
});
|
|
1377
|
+
var mcpHyperliquidFetchStakingSummaryInputSchema = z.object({
|
|
1378
|
+
chainId: z.number().int().positive(),
|
|
1379
|
+
executorAddress: evmAddressSchema
|
|
1380
|
+
});
|
|
1381
|
+
var mcpHyperliquidFetchStakingSummaryOutputSchema = z.object({
|
|
1382
|
+
summary: z.object({
|
|
1383
|
+
delegated: z.string(),
|
|
1384
|
+
undelegated: z.string()
|
|
1385
|
+
})
|
|
1386
|
+
});
|
|
1387
|
+
var mcpHyperliquidFetchDelegationsInputSchema = z.object({
|
|
1388
|
+
chainId: z.number().int().positive(),
|
|
1389
|
+
executorAddress: evmAddressSchema
|
|
1390
|
+
});
|
|
1391
|
+
var mcpHyperliquidFetchDelegationsOutputSchema = z.object({
|
|
1392
|
+
delegations: z.array(
|
|
1393
|
+
z.object({
|
|
1394
|
+
validator: z.string(),
|
|
1395
|
+
amount: z.string()
|
|
1396
|
+
})
|
|
1397
|
+
)
|
|
1398
|
+
});
|
|
1399
|
+
var mcpHyperliquidLimitOrderInputSchema = mcpHyperliquidMultisignInput({
|
|
1400
|
+
coin: z.string().min(1),
|
|
1401
|
+
isBuy: z.boolean(),
|
|
1402
|
+
limitPxHuman: z.string().min(1),
|
|
1403
|
+
szHuman: z.string().min(1),
|
|
1404
|
+
marketKind: z.enum(["perp", "spot"]).optional(),
|
|
1405
|
+
tif: hyperliquidTifSchema.optional(),
|
|
1406
|
+
dex: z.string().optional()
|
|
1407
|
+
});
|
|
1408
|
+
var mcpHyperliquidCloseInputSchema = mcpHyperliquidMultisignInput({
|
|
1409
|
+
coin: z.string().min(1),
|
|
1410
|
+
isLong: z.boolean(),
|
|
1411
|
+
limitPxHuman: z.string().min(1),
|
|
1412
|
+
szHuman: z.string().min(1),
|
|
1413
|
+
dex: z.string().optional(),
|
|
1414
|
+
tif: hyperliquidTifSchema.optional()
|
|
1415
|
+
});
|
|
1416
|
+
var mcpHyperliquidCancelInputSchema = mcpHyperliquidMultisignInput({
|
|
1417
|
+
coin: z.string().min(1),
|
|
1418
|
+
oid: z.number().int().positive(),
|
|
1419
|
+
marketKind: z.enum(["perp", "spot"]).optional(),
|
|
1420
|
+
dex: z.string().optional()
|
|
1421
|
+
});
|
|
1422
|
+
var mcpHyperliquidUsdTransferInputSchema = mcpHyperliquidMultisignInput({
|
|
1423
|
+
usdHuman: z.string().min(1),
|
|
1424
|
+
toPerp: z.boolean()
|
|
1425
|
+
});
|
|
1426
|
+
var mcpHyperliquidVaultDepositInputSchema = mcpHyperliquidMultisignInput({
|
|
1427
|
+
vaultAddress: evmAddressSchema,
|
|
1428
|
+
usdHuman: z.string().min(1)
|
|
1429
|
+
});
|
|
1430
|
+
var mcpHyperliquidVaultWithdrawInputSchema = mcpHyperliquidMultisignInput({
|
|
1431
|
+
vaultAddress: evmAddressSchema,
|
|
1432
|
+
usdHuman: z.string().min(1)
|
|
1433
|
+
});
|
|
1434
|
+
var mcpHyperliquidStakeInputSchema = mcpHyperliquidMultisignInput({
|
|
1435
|
+
hypeHuman: z.string().min(1)
|
|
1436
|
+
});
|
|
1437
|
+
var mcpHyperliquidUnstakeInputSchema = mcpHyperliquidMultisignInput({
|
|
1438
|
+
hypeHuman: z.string().min(1)
|
|
1439
|
+
});
|
|
1440
|
+
var mcpHyperliquidDelegateInputSchema = mcpHyperliquidMultisignInput({
|
|
1441
|
+
hypeHuman: z.string().min(1),
|
|
1442
|
+
validator: evmAddressSchema
|
|
1443
|
+
});
|
|
1444
|
+
var mcpHyperliquidUndelegateInputSchema = mcpHyperliquidMultisignInput({
|
|
1445
|
+
hypeHuman: z.string().min(1),
|
|
1446
|
+
validator: evmAddressSchema
|
|
1447
|
+
});
|
|
1075
1448
|
|
|
1076
1449
|
// src/agent/mcpProtocolTools.ts
|
|
1077
1450
|
function defineProtocolMcpTool(def) {
|
|
@@ -1374,6 +1747,87 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
|
|
|
1374
1747
|
handler: { importPath: "protocols/evm/euler-v2", exportName: "buildEvmMultisignBodyEulerV2BorrowCollateralWithdrawBatch" },
|
|
1375
1748
|
inputZod: mcpEulerV2CollateralWithdrawInputSchema
|
|
1376
1749
|
}),
|
|
1750
|
+
defineProtocolMcpTool({
|
|
1751
|
+
name: "ctm_morpho_build_vault_deposit_multisign",
|
|
1752
|
+
actionId: "morpho.vault-deposit",
|
|
1753
|
+
protocolId: "morpho",
|
|
1754
|
+
chainCategory: "evm",
|
|
1755
|
+
description: "Build Morpho vault deposit batch (wrap/approve + deposit). Works with listed V1 and V2 vaults.",
|
|
1756
|
+
prerequisites: [
|
|
1757
|
+
"keyGenId",
|
|
1758
|
+
"chainId",
|
|
1759
|
+
"vaultAddress from ctm_morpho_fetch_earn_vaults",
|
|
1760
|
+
"underlying",
|
|
1761
|
+
"amountHuman"
|
|
1762
|
+
],
|
|
1763
|
+
handler: { importPath: "protocols/evm/morpho", exportName: "buildEvmMultisignBodyMorphoVaultDepositBatch" },
|
|
1764
|
+
inputZod: mcpMorphoVaultDepositInputSchema
|
|
1765
|
+
}),
|
|
1766
|
+
defineProtocolMcpTool({
|
|
1767
|
+
name: "ctm_morpho_build_vault_withdraw_multisign",
|
|
1768
|
+
actionId: "morpho.vault-withdraw",
|
|
1769
|
+
protocolId: "morpho",
|
|
1770
|
+
chainCategory: "evm",
|
|
1771
|
+
description: "Build Morpho vault withdraw batch. Works with listed V1 and V2 vaults.",
|
|
1772
|
+
prerequisites: [
|
|
1773
|
+
"keyGenId",
|
|
1774
|
+
"chainId",
|
|
1775
|
+
"vaultAddress from ctm_morpho_fetch_earn_vaults or user positions",
|
|
1776
|
+
"amountHuman"
|
|
1777
|
+
],
|
|
1778
|
+
handler: { importPath: "protocols/evm/morpho", exportName: "buildEvmMultisignBodyMorphoVaultWithdraw" },
|
|
1779
|
+
inputZod: mcpMorphoVaultWithdrawInputSchema
|
|
1780
|
+
}),
|
|
1781
|
+
defineProtocolMcpTool({
|
|
1782
|
+
name: "ctm_morpho_build_blue_collateral_deposit_multisign",
|
|
1783
|
+
actionId: "morpho.blue-collateral-deposit",
|
|
1784
|
+
protocolId: "morpho",
|
|
1785
|
+
chainCategory: "evm",
|
|
1786
|
+
description: "Build Morpho Blue supplyCollateral batch.",
|
|
1787
|
+
prerequisites: ["keyGenId", "chainId", "marketId", "collateralToken", "amountHuman"],
|
|
1788
|
+
handler: { importPath: "protocols/evm/morpho", exportName: "buildEvmMultisignBodyMorphoBlueSupplyCollateralBatch" },
|
|
1789
|
+
inputZod: mcpMorphoBlueCollateralDepositInputSchema
|
|
1790
|
+
}),
|
|
1791
|
+
defineProtocolMcpTool({
|
|
1792
|
+
name: "ctm_morpho_build_blue_borrow_multisign",
|
|
1793
|
+
actionId: "morpho.blue-borrow",
|
|
1794
|
+
protocolId: "morpho",
|
|
1795
|
+
chainCategory: "evm",
|
|
1796
|
+
description: "Build Morpho Blue borrow batch.",
|
|
1797
|
+
prerequisites: ["keyGenId", "chainId", "marketId", "loanToken", "amountHuman"],
|
|
1798
|
+
handler: { importPath: "protocols/evm/morpho", exportName: "buildEvmMultisignBodyMorphoBlueBorrowBatch" },
|
|
1799
|
+
inputZod: mcpMorphoBlueBorrowInputSchema
|
|
1800
|
+
}),
|
|
1801
|
+
defineProtocolMcpTool({
|
|
1802
|
+
name: "ctm_morpho_build_blue_repay_multisign",
|
|
1803
|
+
actionId: "morpho.blue-repay",
|
|
1804
|
+
protocolId: "morpho",
|
|
1805
|
+
chainCategory: "evm",
|
|
1806
|
+
description: "Build Morpho Blue repay batch.",
|
|
1807
|
+
prerequisites: ["keyGenId", "chainId", "marketId", "loanToken", "amountHuman"],
|
|
1808
|
+
handler: { importPath: "protocols/evm/morpho", exportName: "buildEvmMultisignBodyMorphoBlueRepayBatch" },
|
|
1809
|
+
inputZod: mcpMorphoBlueRepayInputSchema
|
|
1810
|
+
}),
|
|
1811
|
+
defineProtocolMcpTool({
|
|
1812
|
+
name: "ctm_morpho_build_blue_collateral_withdraw_multisign",
|
|
1813
|
+
actionId: "morpho.blue-collateral-withdraw",
|
|
1814
|
+
protocolId: "morpho",
|
|
1815
|
+
chainCategory: "evm",
|
|
1816
|
+
description: "Build Morpho Blue withdrawCollateral batch.",
|
|
1817
|
+
prerequisites: ["keyGenId", "chainId", "marketId", "amountHuman"],
|
|
1818
|
+
handler: { importPath: "protocols/evm/morpho", exportName: "buildEvmMultisignBodyMorphoBlueWithdrawCollateralBatch" },
|
|
1819
|
+
inputZod: mcpMorphoBlueCollateralWithdrawInputSchema
|
|
1820
|
+
}),
|
|
1821
|
+
defineProtocolMcpTool({
|
|
1822
|
+
name: "ctm_morpho_build_merkl_claim_multisign",
|
|
1823
|
+
actionId: "morpho.merkl-claim",
|
|
1824
|
+
protocolId: "morpho",
|
|
1825
|
+
chainCategory: "evm",
|
|
1826
|
+
description: "Build Morpho Merkl Distributor.claim transaction.",
|
|
1827
|
+
prerequisites: ["keyGenId", "chainId", "claim calldata from Merkl API"],
|
|
1828
|
+
handler: { importPath: "protocols/evm/morpho", exportName: "buildEvmMultisignBodyMorphoMerklDistributorClaim" },
|
|
1829
|
+
inputZod: mcpMorphoMerklClaimInputSchema
|
|
1830
|
+
}),
|
|
1377
1831
|
defineProtocolMcpTool({
|
|
1378
1832
|
name: "ctm_gmx_build_increase_multisign",
|
|
1379
1833
|
actionId: "gmx.increase",
|
|
@@ -1443,6 +1897,109 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
|
|
|
1443
1897
|
prerequisites: ["keyGen", "executorAddress", "staked GMX balance"],
|
|
1444
1898
|
handler: { importPath: "protocols/evm/gmx", exportName: "buildEvmMultisignBodyGmxUnstakeGmxBatch" },
|
|
1445
1899
|
inputZod: mcpGmxUnstakeGmxInputSchema
|
|
1900
|
+
}),
|
|
1901
|
+
defineProtocolMcpTool({
|
|
1902
|
+
name: "ctm_hyperliquid_build_limit_order_multisign",
|
|
1903
|
+
actionId: "hyperliquid.limitOrder",
|
|
1904
|
+
protocolId: "hyperliquid",
|
|
1905
|
+
chainCategory: "evm",
|
|
1906
|
+
description: "Create and submit mpc-auth multiSignRequest for a Hyperliquid limit/IoC order via HyperEVM CoreWriter.",
|
|
1907
|
+
prerequisites: ["keyGen", "executorAddress", "chainId 999 or 998", "coin", "limitPxHuman", "szHuman"],
|
|
1908
|
+
handler: { importPath: "protocols/evm/hyperliquid", exportName: "buildEvmMultisignBodyHyperliquidLimitOrderBatch" },
|
|
1909
|
+
inputZod: mcpHyperliquidLimitOrderInputSchema
|
|
1910
|
+
}),
|
|
1911
|
+
defineProtocolMcpTool({
|
|
1912
|
+
name: "ctm_hyperliquid_build_close_multisign",
|
|
1913
|
+
actionId: "hyperliquid.close",
|
|
1914
|
+
protocolId: "hyperliquid",
|
|
1915
|
+
chainCategory: "evm",
|
|
1916
|
+
description: "Create and submit mpc-auth multiSignRequest to close/reduce a perp (IoC reduce-only limit via CoreWriter).",
|
|
1917
|
+
prerequisites: ["keyGen", "executorAddress", "open position from fetch_positions", "isLong matches position"],
|
|
1918
|
+
handler: { importPath: "protocols/evm/hyperliquid", exportName: "buildEvmMultisignBodyHyperliquidCloseBatch" },
|
|
1919
|
+
inputZod: mcpHyperliquidCloseInputSchema
|
|
1920
|
+
}),
|
|
1921
|
+
defineProtocolMcpTool({
|
|
1922
|
+
name: "ctm_hyperliquid_build_cancel_multisign",
|
|
1923
|
+
actionId: "hyperliquid.cancel",
|
|
1924
|
+
protocolId: "hyperliquid",
|
|
1925
|
+
chainCategory: "evm",
|
|
1926
|
+
description: "Create and submit mpc-auth multiSignRequest to cancel a Hyperliquid open order.",
|
|
1927
|
+
prerequisites: ["keyGen", "executorAddress", "oid from fetch_open_orders"],
|
|
1928
|
+
handler: { importPath: "protocols/evm/hyperliquid", exportName: "buildEvmMultisignBodyHyperliquidCancelBatch" },
|
|
1929
|
+
inputZod: mcpHyperliquidCancelInputSchema
|
|
1930
|
+
}),
|
|
1931
|
+
defineProtocolMcpTool({
|
|
1932
|
+
name: "ctm_hyperliquid_build_usd_transfer_multisign",
|
|
1933
|
+
actionId: "hyperliquid.usdTransfer",
|
|
1934
|
+
protocolId: "hyperliquid",
|
|
1935
|
+
chainCategory: "evm",
|
|
1936
|
+
description: "Create and submit mpc-auth multiSignRequest to move USDC between spot and perp margin.",
|
|
1937
|
+
prerequisites: ["keyGen", "executorAddress", "usdHuman", "toPerp boolean"],
|
|
1938
|
+
handler: {
|
|
1939
|
+
importPath: "protocols/evm/hyperliquid",
|
|
1940
|
+
exportName: "buildEvmMultisignBodyHyperliquidUsdClassTransferBatch"
|
|
1941
|
+
},
|
|
1942
|
+
inputZod: mcpHyperliquidUsdTransferInputSchema
|
|
1943
|
+
}),
|
|
1944
|
+
defineProtocolMcpTool({
|
|
1945
|
+
name: "ctm_hyperliquid_build_vault_deposit_multisign",
|
|
1946
|
+
actionId: "hyperliquid.vaultDeposit",
|
|
1947
|
+
protocolId: "hyperliquid",
|
|
1948
|
+
chainCategory: "evm",
|
|
1949
|
+
description: "Create and submit mpc-auth multiSignRequest for Hyperliquid vault deposit.",
|
|
1950
|
+
prerequisites: ["keyGen", "executorAddress", "vaultAddress from fetch_vaults"],
|
|
1951
|
+
handler: { importPath: "protocols/evm/hyperliquid", exportName: "buildEvmMultisignBodyHyperliquidVaultDepositBatch" },
|
|
1952
|
+
inputZod: mcpHyperliquidVaultDepositInputSchema
|
|
1953
|
+
}),
|
|
1954
|
+
defineProtocolMcpTool({
|
|
1955
|
+
name: "ctm_hyperliquid_build_vault_withdraw_multisign",
|
|
1956
|
+
actionId: "hyperliquid.vaultWithdraw",
|
|
1957
|
+
protocolId: "hyperliquid",
|
|
1958
|
+
chainCategory: "evm",
|
|
1959
|
+
description: "Create and submit mpc-auth multiSignRequest for Hyperliquid vault withdraw (includes accrued PnL).",
|
|
1960
|
+
prerequisites: ["keyGen", "executorAddress", "vaultAddress", "equity from fetch_user_vault_equities"],
|
|
1961
|
+
handler: { importPath: "protocols/evm/hyperliquid", exportName: "buildEvmMultisignBodyHyperliquidVaultWithdrawBatch" },
|
|
1962
|
+
inputZod: mcpHyperliquidVaultWithdrawInputSchema
|
|
1963
|
+
}),
|
|
1964
|
+
defineProtocolMcpTool({
|
|
1965
|
+
name: "ctm_hyperliquid_build_stake_multisign",
|
|
1966
|
+
actionId: "hyperliquid.stake",
|
|
1967
|
+
protocolId: "hyperliquid",
|
|
1968
|
+
chainCategory: "evm",
|
|
1969
|
+
description: "Create and submit mpc-auth multiSignRequest to stake HYPE via CoreWriter.",
|
|
1970
|
+
prerequisites: ["keyGen", "executorAddress", "HYPE balance on Hyperliquid account"],
|
|
1971
|
+
handler: { importPath: "protocols/evm/hyperliquid", exportName: "buildEvmMultisignBodyHyperliquidStakeDepositBatch" },
|
|
1972
|
+
inputZod: mcpHyperliquidStakeInputSchema
|
|
1973
|
+
}),
|
|
1974
|
+
defineProtocolMcpTool({
|
|
1975
|
+
name: "ctm_hyperliquid_build_unstake_multisign",
|
|
1976
|
+
actionId: "hyperliquid.unstake",
|
|
1977
|
+
protocolId: "hyperliquid",
|
|
1978
|
+
chainCategory: "evm",
|
|
1979
|
+
description: "Create and submit mpc-auth multiSignRequest to unstake HYPE via CoreWriter.",
|
|
1980
|
+
prerequisites: ["keyGen", "executorAddress", "staked HYPE"],
|
|
1981
|
+
handler: { importPath: "protocols/evm/hyperliquid", exportName: "buildEvmMultisignBodyHyperliquidStakeWithdrawBatch" },
|
|
1982
|
+
inputZod: mcpHyperliquidUnstakeInputSchema
|
|
1983
|
+
}),
|
|
1984
|
+
defineProtocolMcpTool({
|
|
1985
|
+
name: "ctm_hyperliquid_build_delegate_multisign",
|
|
1986
|
+
actionId: "hyperliquid.delegate",
|
|
1987
|
+
protocolId: "hyperliquid",
|
|
1988
|
+
chainCategory: "evm",
|
|
1989
|
+
description: "Create and submit mpc-auth multiSignRequest to delegate staked HYPE to a validator.",
|
|
1990
|
+
prerequisites: ["keyGen", "executorAddress", "validator address", "hypeHuman"],
|
|
1991
|
+
handler: { importPath: "protocols/evm/hyperliquid", exportName: "buildEvmMultisignBodyHyperliquidDelegateOnlyBatch" },
|
|
1992
|
+
inputZod: mcpHyperliquidDelegateInputSchema
|
|
1993
|
+
}),
|
|
1994
|
+
defineProtocolMcpTool({
|
|
1995
|
+
name: "ctm_hyperliquid_build_undelegate_multisign",
|
|
1996
|
+
actionId: "hyperliquid.undelegate",
|
|
1997
|
+
protocolId: "hyperliquid",
|
|
1998
|
+
chainCategory: "evm",
|
|
1999
|
+
description: "Create and submit mpc-auth multiSignRequest to undelegate HYPE from a validator.",
|
|
2000
|
+
prerequisites: ["keyGen", "executorAddress", "delegation from fetch_delegations"],
|
|
2001
|
+
handler: { importPath: "protocols/evm/hyperliquid", exportName: "buildEvmMultisignBodyHyperliquidUndelegateBatch" },
|
|
2002
|
+
inputZod: mcpHyperliquidUndelegateInputSchema
|
|
1446
2003
|
})
|
|
1447
2004
|
];
|
|
1448
2005
|
|
|
@@ -1788,6 +2345,165 @@ var CORE_MCP_TOOL_DEFINITIONS = [
|
|
|
1788
2345
|
handler: { importPath: "protocols/evm/gmx", exportName: "gmxFetchStakingPower" },
|
|
1789
2346
|
inputZod: mcpGmxFetchStakingPowerInputSchema,
|
|
1790
2347
|
outputZod: mcpGmxFetchStakingPowerOutputSchema
|
|
2348
|
+
}),
|
|
2349
|
+
defineMcpTool({
|
|
2350
|
+
name: "ctm_hyperliquid_fetch_markets",
|
|
2351
|
+
actionId: "hyperliquid.fetch-markets",
|
|
2352
|
+
protocolId: "hyperliquid",
|
|
2353
|
+
chainCategory: "evm",
|
|
2354
|
+
description: "List Hyperliquid perp markets (native + all HIP-3 dexes when dex omitted). Each market has coin name, maxLeverage, szDecimals, and optional dex (e.g. xyz for xyz:AAPL). chainId 999 mainnet or 998 testnet.",
|
|
2355
|
+
prerequisites: ["chainId 999 or 998"],
|
|
2356
|
+
followUp: ["ctm_hyperliquid_fetch_open_context", "ctm_hyperliquid_build_limit_order_multisign"],
|
|
2357
|
+
handler: { importPath: "protocols/evm/hyperliquid", exportName: "hyperliquidFetchMarketsSummary" },
|
|
2358
|
+
inputZod: mcpHyperliquidFetchMarketsInputSchema,
|
|
2359
|
+
outputZod: mcpHyperliquidFetchMarketsOutputSchema
|
|
2360
|
+
}),
|
|
2361
|
+
defineMcpTool({
|
|
2362
|
+
name: "ctm_hyperliquid_search_markets",
|
|
2363
|
+
actionId: "hyperliquid.search-markets",
|
|
2364
|
+
protocolId: "hyperliquid",
|
|
2365
|
+
chainCategory: "evm",
|
|
2366
|
+
description: "Search Hyperliquid perp markets across all dexes by ticker (AAPL, BTC), display name, or keyword (Apple, tesla). Case-insensitive. Returns canonical coin names (e.g. xyz:AAPL).",
|
|
2367
|
+
prerequisites: ["chainId 999 or 998", "query"],
|
|
2368
|
+
followUp: ["ctm_hyperliquid_fetch_open_context", "ctm_hyperliquid_build_limit_order_multisign"],
|
|
2369
|
+
handler: { importPath: "protocols/evm/hyperliquid", exportName: "hyperliquidSearchMarketsSummary" },
|
|
2370
|
+
inputZod: mcpHyperliquidSearchMarketsInputSchema,
|
|
2371
|
+
outputZod: mcpHyperliquidSearchMarketsOutputSchema
|
|
2372
|
+
}),
|
|
2373
|
+
defineMcpTool({
|
|
2374
|
+
name: "ctm_hyperliquid_fetch_open_context",
|
|
2375
|
+
actionId: "hyperliquid.fetch-open-context",
|
|
2376
|
+
protocolId: "hyperliquid",
|
|
2377
|
+
chainCategory: "evm",
|
|
2378
|
+
description: "Per-market trading context: account value, withdrawable, margin used, leverage setting, mark price, available buy/sell size. Resolves ticker/name (AAPL, Apple) across dexes.",
|
|
2379
|
+
prerequisites: ["chainId", "executorAddress", "coin from fetch_markets"],
|
|
2380
|
+
followUp: ["ctm_hyperliquid_build_limit_order_multisign"],
|
|
2381
|
+
handler: { importPath: "protocols/evm/hyperliquid", exportName: "hyperliquidFetchOpenContextSummary" },
|
|
2382
|
+
inputZod: mcpHyperliquidFetchOpenContextInputSchema,
|
|
2383
|
+
outputZod: mcpHyperliquidFetchOpenContextOutputSchema
|
|
2384
|
+
}),
|
|
2385
|
+
defineMcpTool({
|
|
2386
|
+
name: "ctm_hyperliquid_fetch_positions",
|
|
2387
|
+
actionId: "hyperliquid.fetch-positions",
|
|
2388
|
+
protocolId: "hyperliquid",
|
|
2389
|
+
chainCategory: "evm",
|
|
2390
|
+
description: "Open Hyperliquid perp positions for executor (size, entry, uPnL, liq price, leverage, margin).",
|
|
2391
|
+
prerequisites: ["chainId", "executorAddress"],
|
|
2392
|
+
followUp: ["ctm_hyperliquid_build_close_multisign"],
|
|
2393
|
+
handler: { importPath: "protocols/evm/hyperliquid", exportName: "hyperliquidFetchPositionsForExecutor" },
|
|
2394
|
+
inputZod: mcpHyperliquidFetchPositionsInputSchema,
|
|
2395
|
+
outputZod: mcpHyperliquidFetchPositionsOutputSchema
|
|
2396
|
+
}),
|
|
2397
|
+
defineMcpTool({
|
|
2398
|
+
name: "ctm_hyperliquid_fetch_open_orders",
|
|
2399
|
+
actionId: "hyperliquid.fetch-open-orders",
|
|
2400
|
+
protocolId: "hyperliquid",
|
|
2401
|
+
chainCategory: "evm",
|
|
2402
|
+
description: "Pending Hyperliquid open orders for executor (oid, coin, side, price, size).",
|
|
2403
|
+
prerequisites: ["chainId", "executorAddress"],
|
|
2404
|
+
followUp: ["ctm_hyperliquid_build_cancel_multisign"],
|
|
2405
|
+
handler: { importPath: "protocols/evm/hyperliquid", exportName: "hyperliquidFetchOpenOrdersSummary" },
|
|
2406
|
+
inputZod: mcpHyperliquidFetchOpenOrdersInputSchema,
|
|
2407
|
+
outputZod: mcpHyperliquidFetchOpenOrdersOutputSchema
|
|
2408
|
+
}),
|
|
2409
|
+
defineMcpTool({
|
|
2410
|
+
name: "ctm_hyperliquid_fetch_market_snapshot",
|
|
2411
|
+
actionId: "hyperliquid.fetch-market-snapshot",
|
|
2412
|
+
protocolId: "hyperliquid",
|
|
2413
|
+
chainCategory: "evm",
|
|
2414
|
+
description: "Live mark/mid price plus recent OHLCV candles for a Hyperliquid perp. Uses metaAndAssetCtxs for live prices (not stale candle close). Default interval 15m, 48 bars. Throws if live price unavailable.",
|
|
2415
|
+
prerequisites: ["chainId", "coin"],
|
|
2416
|
+
followUp: ["ctm_hyperliquid_fetch_open_context", "ctm_hyperliquid_build_limit_order_multisign"],
|
|
2417
|
+
handler: { importPath: "protocols/evm/hyperliquid", exportName: "hyperliquidFetchMarketSnapshotSummary" },
|
|
2418
|
+
inputZod: mcpHyperliquidFetchMarketSnapshotInputSchema,
|
|
2419
|
+
outputZod: mcpHyperliquidFetchMarketSnapshotOutputSchema
|
|
2420
|
+
}),
|
|
2421
|
+
defineMcpTool({
|
|
2422
|
+
name: "ctm_hyperliquid_fetch_ohlcv",
|
|
2423
|
+
actionId: "hyperliquid.fetch-ohlcv",
|
|
2424
|
+
protocolId: "hyperliquid",
|
|
2425
|
+
chainCategory: "evm",
|
|
2426
|
+
description: "OHLCV candle history for a Hyperliquid perp over an explicit lookback or time range. Requests only the needed window from Hyperliquid (e.g. lookbackDays: 7, interval: 15m \u2192 ~672 bars). Max 2000 bars \u2014 use coarser interval for longer history. Resolves ticker/name across dexes.",
|
|
2427
|
+
prerequisites: ["chainId 999 or 998", "coin", "lookbackDays or lookbackHours or startTimeMs"],
|
|
2428
|
+
followUp: ["ctm_hyperliquid_fetch_market_snapshot", "ctm_hyperliquid_build_limit_order_multisign"],
|
|
2429
|
+
handler: { importPath: "protocols/evm/hyperliquid", exportName: "hyperliquidFetchOhlcvSummary" },
|
|
2430
|
+
inputZod: mcpHyperliquidFetchOhlcvInputSchema,
|
|
2431
|
+
outputZod: mcpHyperliquidFetchOhlcvOutputSchema
|
|
2432
|
+
}),
|
|
2433
|
+
defineMcpTool({
|
|
2434
|
+
name: "ctm_hyperliquid_fetch_usd_class_balances",
|
|
2435
|
+
actionId: "hyperliquid.fetch-usd-balances",
|
|
2436
|
+
protocolId: "hyperliquid",
|
|
2437
|
+
chainCategory: "evm",
|
|
2438
|
+
description: "Spot USDC available and perp withdrawable USD for spot\u2194perp transfers.",
|
|
2439
|
+
prerequisites: ["chainId", "executorAddress"],
|
|
2440
|
+
followUp: ["ctm_hyperliquid_build_usd_transfer_multisign"],
|
|
2441
|
+
handler: { importPath: "protocols/evm/hyperliquid", exportName: "hyperliquidFetchUsdClassBalancesSummary" },
|
|
2442
|
+
inputZod: mcpHyperliquidFetchUsdClassBalancesInputSchema,
|
|
2443
|
+
outputZod: mcpHyperliquidFetchUsdClassBalancesOutputSchema
|
|
2444
|
+
}),
|
|
2445
|
+
defineMcpTool({
|
|
2446
|
+
name: "ctm_hyperliquid_fetch_vaults",
|
|
2447
|
+
actionId: "hyperliquid.fetch-vaults",
|
|
2448
|
+
protocolId: "hyperliquid",
|
|
2449
|
+
chainCategory: "evm",
|
|
2450
|
+
description: "Vault catalog by TVL with APR (mainnet only; may take ~10\u201315s). Pass executorAddress to merge user-held vaults.",
|
|
2451
|
+
prerequisites: ["chainId 999 for catalog"],
|
|
2452
|
+
followUp: ["ctm_hyperliquid_build_vault_deposit_multisign"],
|
|
2453
|
+
handler: { importPath: "protocols/evm/hyperliquid", exportName: "hyperliquidFetchVaultCatalogSummary" },
|
|
2454
|
+
inputZod: mcpHyperliquidFetchVaultsInputSchema,
|
|
2455
|
+
outputZod: mcpHyperliquidFetchVaultsOutputSchema
|
|
2456
|
+
}),
|
|
2457
|
+
defineMcpTool({
|
|
2458
|
+
name: "ctm_hyperliquid_fetch_user_vault_equities",
|
|
2459
|
+
actionId: "hyperliquid.fetch-user-vault-equities",
|
|
2460
|
+
protocolId: "hyperliquid",
|
|
2461
|
+
chainCategory: "evm",
|
|
2462
|
+
description: "USD equity the user holds in Hyperliquid vaults.",
|
|
2463
|
+
prerequisites: ["chainId", "executorAddress"],
|
|
2464
|
+
followUp: ["ctm_hyperliquid_build_vault_withdraw_multisign"],
|
|
2465
|
+
handler: { importPath: "protocols/evm/hyperliquid", exportName: "hyperliquidFetchUserVaultEquitiesSummary" },
|
|
2466
|
+
inputZod: mcpHyperliquidFetchUserVaultEquitiesInputSchema,
|
|
2467
|
+
outputZod: mcpHyperliquidFetchUserVaultEquitiesOutputSchema
|
|
2468
|
+
}),
|
|
2469
|
+
defineMcpTool({
|
|
2470
|
+
name: "ctm_hyperliquid_fetch_staking_summary",
|
|
2471
|
+
actionId: "hyperliquid.fetch-staking-summary",
|
|
2472
|
+
protocolId: "hyperliquid",
|
|
2473
|
+
chainCategory: "evm",
|
|
2474
|
+
description: "HYPE staking summary: delegated and undelegated amounts.",
|
|
2475
|
+
prerequisites: ["chainId", "executorAddress"],
|
|
2476
|
+
followUp: ["ctm_hyperliquid_build_stake_multisign", "ctm_hyperliquid_build_delegate_multisign"],
|
|
2477
|
+
handler: { importPath: "protocols/evm/hyperliquid", exportName: "hyperliquidFetchStakingSummaryForExecutor" },
|
|
2478
|
+
inputZod: mcpHyperliquidFetchStakingSummaryInputSchema,
|
|
2479
|
+
outputZod: mcpHyperliquidFetchStakingSummaryOutputSchema
|
|
2480
|
+
}),
|
|
2481
|
+
defineMcpTool({
|
|
2482
|
+
name: "ctm_hyperliquid_fetch_delegations",
|
|
2483
|
+
actionId: "hyperliquid.fetch-delegations",
|
|
2484
|
+
protocolId: "hyperliquid",
|
|
2485
|
+
chainCategory: "evm",
|
|
2486
|
+
description: "HYPE delegations by validator for executor.",
|
|
2487
|
+
prerequisites: ["chainId", "executorAddress"],
|
|
2488
|
+
followUp: ["ctm_hyperliquid_build_undelegate_multisign"],
|
|
2489
|
+
handler: { importPath: "protocols/evm/hyperliquid", exportName: "hyperliquidFetchDelegationsForExecutor" },
|
|
2490
|
+
inputZod: mcpHyperliquidFetchDelegationsInputSchema,
|
|
2491
|
+
outputZod: mcpHyperliquidFetchDelegationsOutputSchema
|
|
2492
|
+
}),
|
|
2493
|
+
defineMcpTool({
|
|
2494
|
+
name: "ctm_morpho_fetch_earn_vaults",
|
|
2495
|
+
actionId: "morpho.fetch-earn-vaults",
|
|
2496
|
+
protocolId: "morpho",
|
|
2497
|
+
chainCategory: "evm",
|
|
2498
|
+
description: "Morpho-listed earn vaults (V1 + V2 unified). Filter by deposit asset symbol/address and/or case-insensitive vault name search. Returns vaultAddress for deposit/withdraw multisign tools.",
|
|
2499
|
+
prerequisites: ["chainId"],
|
|
2500
|
+
followUp: [
|
|
2501
|
+
"ctm_morpho_build_vault_deposit_multisign",
|
|
2502
|
+
"ctm_morpho_build_vault_withdraw_multisign"
|
|
2503
|
+
],
|
|
2504
|
+
handler: { importPath: "protocols/evm/morpho", exportName: "morphoFetchEarnVaultsSummary" },
|
|
2505
|
+
inputZod: mcpMorphoFetchEarnVaultsInputSchema,
|
|
2506
|
+
outputZod: mcpMorphoFetchEarnVaultsOutputSchema
|
|
1791
2507
|
})
|
|
1792
2508
|
];
|
|
1793
2509
|
var MCP_TOOL_DEFINITIONS = [
|
|
@@ -2014,7 +2730,30 @@ registerProtocolModule(ethenaProtocolModule);
|
|
|
2014
2730
|
function isMapleSyrupSupportedChain(chainId) {
|
|
2015
2731
|
return chainId === 1 || chainId === 11155111;
|
|
2016
2732
|
}
|
|
2733
|
+
|
|
2734
|
+
// src/core/defiProxy.ts
|
|
2735
|
+
var aaveGraphqlProxyUrl;
|
|
2736
|
+
var morphoGraphqlProxyUrl;
|
|
2737
|
+
function getAaveGraphqlProxyUrl() {
|
|
2738
|
+
return aaveGraphqlProxyUrl;
|
|
2739
|
+
}
|
|
2740
|
+
function getMorphoGraphqlProxyUrl() {
|
|
2741
|
+
return morphoGraphqlProxyUrl;
|
|
2742
|
+
}
|
|
2017
2743
|
async function postJsonViaOptionalProxy(args) {
|
|
2744
|
+
const proxy = args.proxyUrl?.trim();
|
|
2745
|
+
if (proxy) {
|
|
2746
|
+
const r2 = await fetch(proxy, {
|
|
2747
|
+
method: "POST",
|
|
2748
|
+
headers: { "content-type": "application/json" },
|
|
2749
|
+
body: JSON.stringify(args.proxyEnvelope ?? args.body)
|
|
2750
|
+
});
|
|
2751
|
+
if (!r2.ok) {
|
|
2752
|
+
const t = await r2.text().catch(() => "");
|
|
2753
|
+
throw new Error(t ? `Proxy HTTP ${r2.status}: ${t.slice(0, 200)}` : `Proxy HTTP ${r2.status}`);
|
|
2754
|
+
}
|
|
2755
|
+
return await r2.json();
|
|
2756
|
+
}
|
|
2018
2757
|
const r = await fetch(args.directUrl, {
|
|
2019
2758
|
method: "POST",
|
|
2020
2759
|
headers: { "content-type": "application/json" },
|
|
@@ -2077,7 +2816,10 @@ async function aaveV4Gql(query, variables) {
|
|
|
2077
2816
|
const body = { query, variables: variables ?? {} };
|
|
2078
2817
|
const j = await postJsonViaOptionalProxy({
|
|
2079
2818
|
directUrl: AAVE_V4_GRAPHQL_URL,
|
|
2080
|
-
body
|
|
2819
|
+
body,
|
|
2820
|
+
proxyUrl: getAaveGraphqlProxyUrl(),
|
|
2821
|
+
proxyEnvelope: body
|
|
2822
|
+
});
|
|
2081
2823
|
if (j.errors?.length) {
|
|
2082
2824
|
const msg = j.errors.map((e) => e.message ?? "Unknown").join("; ");
|
|
2083
2825
|
throw new Error(msg);
|
|
@@ -2410,6 +3152,315 @@ var gmxProtocolModule = {
|
|
|
2410
3152
|
]
|
|
2411
3153
|
};
|
|
2412
3154
|
registerProtocolModule(gmxProtocolModule);
|
|
3155
|
+
|
|
3156
|
+
// src/protocols/evm/hyperliquid/support.ts
|
|
3157
|
+
var HYPERLIQUID_SUPPORTED_CHAIN_IDS = [999, 998];
|
|
3158
|
+
function isHyperliquidChainSupported(chainId) {
|
|
3159
|
+
return HYPERLIQUID_SUPPORTED_CHAIN_IDS.includes(chainId);
|
|
3160
|
+
}
|
|
3161
|
+
|
|
3162
|
+
// src/protocols/evm/hyperliquid/index.ts
|
|
3163
|
+
var HYPERLIQUID_PROTOCOL_ID = "hyperliquid";
|
|
3164
|
+
var hyperliquidProtocolModule = {
|
|
3165
|
+
id: HYPERLIQUID_PROTOCOL_ID,
|
|
3166
|
+
chainCategory: "evm",
|
|
3167
|
+
isChainSupported(ctx) {
|
|
3168
|
+
if (ctx.chainCategory !== "evm") return false;
|
|
3169
|
+
const chainId = typeof ctx.chainId === "number" ? ctx.chainId : Number(ctx.chainId);
|
|
3170
|
+
return Number.isFinite(chainId) && isHyperliquidChainSupported(chainId);
|
|
3171
|
+
},
|
|
3172
|
+
isTokenSupported(token) {
|
|
3173
|
+
if (token.category !== "evm") return false;
|
|
3174
|
+
return token.kind === "erc20" || token.kind === "native";
|
|
3175
|
+
},
|
|
3176
|
+
actions: [
|
|
3177
|
+
{
|
|
3178
|
+
id: "hyperliquid.limitOrder",
|
|
3179
|
+
protocolId: HYPERLIQUID_PROTOCOL_ID,
|
|
3180
|
+
chainCategory: "evm",
|
|
3181
|
+
description: "Place a Hyperliquid limit/IoC order via HyperEVM CoreWriter",
|
|
3182
|
+
commonParams: ["keyGen", "purposeText", "useCustomGas"],
|
|
3183
|
+
params: {
|
|
3184
|
+
coin: { type: "string", required: true, description: "Market coin e.g. BTC" },
|
|
3185
|
+
isBuy: { type: "boolean", required: true, description: "true for buy/long, false for sell/short" },
|
|
3186
|
+
limitPxHuman: { type: "string", required: true, description: "Limit price" },
|
|
3187
|
+
szHuman: { type: "string", required: true, description: "Order size in coin units" },
|
|
3188
|
+
marketKind: { type: "string", required: false, description: "perp (default) or spot" },
|
|
3189
|
+
tif: { type: "string", required: false, description: "gtc, ioc, or alo" },
|
|
3190
|
+
dex: { type: "string", required: false, description: "HIP-3 dex name when applicable" }
|
|
3191
|
+
}
|
|
3192
|
+
},
|
|
3193
|
+
{
|
|
3194
|
+
id: "hyperliquid.close",
|
|
3195
|
+
protocolId: HYPERLIQUID_PROTOCOL_ID,
|
|
3196
|
+
chainCategory: "evm",
|
|
3197
|
+
description: "Close or reduce a perp via IoC reduce-only limit order (CoreWriter)",
|
|
3198
|
+
commonParams: ["keyGen", "purposeText", "useCustomGas"],
|
|
3199
|
+
params: {
|
|
3200
|
+
coin: { type: "string", required: true, description: "Market coin" },
|
|
3201
|
+
isLong: { type: "boolean", required: true, description: "true if closing a long position" },
|
|
3202
|
+
limitPxHuman: { type: "string", required: true, description: "Limit price" },
|
|
3203
|
+
szHuman: { type: "string", required: true, description: "Size to close in coin units" }
|
|
3204
|
+
}
|
|
3205
|
+
},
|
|
3206
|
+
{
|
|
3207
|
+
id: "hyperliquid.cancel",
|
|
3208
|
+
protocolId: HYPERLIQUID_PROTOCOL_ID,
|
|
3209
|
+
chainCategory: "evm",
|
|
3210
|
+
description: "Cancel a Hyperliquid open order via CoreWriter",
|
|
3211
|
+
commonParams: ["keyGen", "purposeText", "useCustomGas"],
|
|
3212
|
+
params: {
|
|
3213
|
+
coin: { type: "string", required: true, description: "Market coin" },
|
|
3214
|
+
oid: { type: "number", required: true, description: "Order id from openOrders" }
|
|
3215
|
+
}
|
|
3216
|
+
},
|
|
3217
|
+
{
|
|
3218
|
+
id: "hyperliquid.usdTransfer",
|
|
3219
|
+
protocolId: HYPERLIQUID_PROTOCOL_ID,
|
|
3220
|
+
chainCategory: "evm",
|
|
3221
|
+
description: "Move USDC between Hyperliquid spot and perp margin accounts",
|
|
3222
|
+
commonParams: ["keyGen", "purposeText", "useCustomGas"],
|
|
3223
|
+
params: {
|
|
3224
|
+
usdHuman: { type: "string", required: true, description: "USD amount" },
|
|
3225
|
+
toPerp: { type: "boolean", required: true, description: "true spot\u2192perp, false perp\u2192spot" }
|
|
3226
|
+
}
|
|
3227
|
+
},
|
|
3228
|
+
{
|
|
3229
|
+
id: "hyperliquid.vaultDeposit",
|
|
3230
|
+
protocolId: HYPERLIQUID_PROTOCOL_ID,
|
|
3231
|
+
chainCategory: "evm",
|
|
3232
|
+
description: "Deposit USD into a Hyperliquid vault",
|
|
3233
|
+
commonParams: ["keyGen", "purposeText", "useCustomGas"],
|
|
3234
|
+
params: {
|
|
3235
|
+
vaultAddress: { type: "string", required: true, description: "Vault address" },
|
|
3236
|
+
usdHuman: { type: "string", required: true, description: "USD amount" }
|
|
3237
|
+
}
|
|
3238
|
+
},
|
|
3239
|
+
{
|
|
3240
|
+
id: "hyperliquid.vaultWithdraw",
|
|
3241
|
+
protocolId: HYPERLIQUID_PROTOCOL_ID,
|
|
3242
|
+
chainCategory: "evm",
|
|
3243
|
+
description: "Withdraw USD from a Hyperliquid vault (includes accrued PnL)",
|
|
3244
|
+
commonParams: ["keyGen", "purposeText", "useCustomGas"],
|
|
3245
|
+
params: {
|
|
3246
|
+
vaultAddress: { type: "string", required: true, description: "Vault address" },
|
|
3247
|
+
usdHuman: { type: "string", required: true, description: "USD amount" }
|
|
3248
|
+
}
|
|
3249
|
+
},
|
|
3250
|
+
{
|
|
3251
|
+
id: "hyperliquid.stake",
|
|
3252
|
+
protocolId: HYPERLIQUID_PROTOCOL_ID,
|
|
3253
|
+
chainCategory: "evm",
|
|
3254
|
+
description: "Stake HYPE via CoreWriter",
|
|
3255
|
+
commonParams: ["keyGen", "purposeText", "useCustomGas"],
|
|
3256
|
+
params: {
|
|
3257
|
+
hypeHuman: { type: "string", required: true, description: "HYPE amount" }
|
|
3258
|
+
}
|
|
3259
|
+
},
|
|
3260
|
+
{
|
|
3261
|
+
id: "hyperliquid.unstake",
|
|
3262
|
+
protocolId: HYPERLIQUID_PROTOCOL_ID,
|
|
3263
|
+
chainCategory: "evm",
|
|
3264
|
+
description: "Unstake HYPE via CoreWriter",
|
|
3265
|
+
commonParams: ["keyGen", "purposeText", "useCustomGas"],
|
|
3266
|
+
params: {
|
|
3267
|
+
hypeHuman: { type: "string", required: true, description: "HYPE amount" }
|
|
3268
|
+
}
|
|
3269
|
+
},
|
|
3270
|
+
{
|
|
3271
|
+
id: "hyperliquid.delegate",
|
|
3272
|
+
protocolId: HYPERLIQUID_PROTOCOL_ID,
|
|
3273
|
+
chainCategory: "evm",
|
|
3274
|
+
description: "Delegate staked HYPE to a validator",
|
|
3275
|
+
commonParams: ["keyGen", "purposeText", "useCustomGas"],
|
|
3276
|
+
params: {
|
|
3277
|
+
hypeHuman: { type: "string", required: true, description: "HYPE amount" },
|
|
3278
|
+
validator: { type: "string", required: true, description: "Validator address" }
|
|
3279
|
+
}
|
|
3280
|
+
},
|
|
3281
|
+
{
|
|
3282
|
+
id: "hyperliquid.undelegate",
|
|
3283
|
+
protocolId: HYPERLIQUID_PROTOCOL_ID,
|
|
3284
|
+
chainCategory: "evm",
|
|
3285
|
+
description: "Undelegate HYPE from a validator",
|
|
3286
|
+
commonParams: ["keyGen", "purposeText", "useCustomGas"],
|
|
3287
|
+
params: {
|
|
3288
|
+
hypeHuman: { type: "string", required: true, description: "HYPE amount" },
|
|
3289
|
+
validator: { type: "string", required: true, description: "Validator address" }
|
|
3290
|
+
}
|
|
3291
|
+
}
|
|
3292
|
+
]
|
|
3293
|
+
};
|
|
3294
|
+
registerProtocolModule(hyperliquidProtocolModule);
|
|
3295
|
+
var MORPHO_GRAPHQL_URL = "https://api.morpho.org/graphql";
|
|
3296
|
+
async function morphoGql(query, variables) {
|
|
3297
|
+
const body = { query, variables: variables ?? {} };
|
|
3298
|
+
const j = await postJsonViaOptionalProxy({
|
|
3299
|
+
directUrl: MORPHO_GRAPHQL_URL,
|
|
3300
|
+
body,
|
|
3301
|
+
proxyUrl: getMorphoGraphqlProxyUrl(),
|
|
3302
|
+
proxyEnvelope: body
|
|
3303
|
+
});
|
|
3304
|
+
if (j.errors?.length) {
|
|
3305
|
+
const msg = j.errors.map((e) => e.message ?? "Unknown").join("; ");
|
|
3306
|
+
throw new Error(msg);
|
|
3307
|
+
}
|
|
3308
|
+
if (j.data == null) throw new Error("Morpho API: empty response");
|
|
3309
|
+
return j.data;
|
|
3310
|
+
}
|
|
3311
|
+
async function fetchMorphoChains() {
|
|
3312
|
+
const d = await morphoGql(`
|
|
3313
|
+
query { chains { id network } }
|
|
3314
|
+
`);
|
|
3315
|
+
return d.chains ?? [];
|
|
3316
|
+
}
|
|
3317
|
+
async function loadMorphoSupportedChainIds() {
|
|
3318
|
+
const rows = await fetchMorphoChains();
|
|
3319
|
+
const s = /* @__PURE__ */ new Set();
|
|
3320
|
+
for (const c of rows) {
|
|
3321
|
+
if (typeof c.id === "number" && Number.isFinite(c.id)) s.add(c.id);
|
|
3322
|
+
}
|
|
3323
|
+
return s;
|
|
3324
|
+
}
|
|
3325
|
+
var VAULT_PAGE_SIZE = 100;
|
|
3326
|
+
async function fetchMorphoVaultsForChain(chainId, first = 100) {
|
|
3327
|
+
const d = await morphoGql(
|
|
3328
|
+
`
|
|
3329
|
+
query MorphoVaults($chainId: Int!, $first: Int!) {
|
|
3330
|
+
vaults(first: $first, where: { chainId_in: [$chainId], listed: true }, orderBy: TotalAssetsUsd, orderDirection: Desc) {
|
|
3331
|
+
items {
|
|
3332
|
+
address symbol name listed
|
|
3333
|
+
asset { address symbol decimals price { usd } }
|
|
3334
|
+
chain { id }
|
|
3335
|
+
state { apy netApy fee totalAssetsUsd allRewards { supplyApr asset { address symbol } } }
|
|
3336
|
+
}
|
|
3337
|
+
}
|
|
3338
|
+
}
|
|
3339
|
+
`,
|
|
3340
|
+
{ chainId, first }
|
|
3341
|
+
);
|
|
3342
|
+
return d.vaults?.items ?? [];
|
|
3343
|
+
}
|
|
3344
|
+
async function fetchMorphoVaultV2sForChain(chainId, first = 100, skip = 0) {
|
|
3345
|
+
const d = await morphoGql(
|
|
3346
|
+
`
|
|
3347
|
+
query MorphoVaultV2s($chainId: Int!, $first: Int!, $skip: Int!) {
|
|
3348
|
+
vaultV2s(
|
|
3349
|
+
first: $first
|
|
3350
|
+
skip: $skip
|
|
3351
|
+
where: { chainId_in: [$chainId], listed: true }
|
|
3352
|
+
orderBy: TotalAssetsUsd
|
|
3353
|
+
orderDirection: Desc
|
|
3354
|
+
) {
|
|
3355
|
+
items {
|
|
3356
|
+
address symbol name listed
|
|
3357
|
+
asset { address symbol decimals price { usd } }
|
|
3358
|
+
chain { id }
|
|
3359
|
+
apy netApy performanceFee managementFee totalAssetsUsd
|
|
3360
|
+
rewards { supplyApr asset { address symbol } }
|
|
3361
|
+
}
|
|
3362
|
+
}
|
|
3363
|
+
}
|
|
3364
|
+
`,
|
|
3365
|
+
{ chainId, first, skip }
|
|
3366
|
+
);
|
|
3367
|
+
return d.vaultV2s?.items ?? [];
|
|
3368
|
+
}
|
|
3369
|
+
async function fetchAllMorphoVaultV2AssetAddresses(chainId) {
|
|
3370
|
+
const out = /* @__PURE__ */ new Set();
|
|
3371
|
+
let skip = 0;
|
|
3372
|
+
for (let page = 0; page < 20; page++) {
|
|
3373
|
+
const batch = await fetchMorphoVaultV2sForChain(chainId, VAULT_PAGE_SIZE, skip);
|
|
3374
|
+
if (!batch.length) break;
|
|
3375
|
+
for (const v of batch) {
|
|
3376
|
+
const a = (v.asset?.address ?? "").trim();
|
|
3377
|
+
if (isAddress(a)) out.add(getAddress(a).toLowerCase());
|
|
3378
|
+
}
|
|
3379
|
+
if (batch.length < VAULT_PAGE_SIZE) break;
|
|
3380
|
+
skip += VAULT_PAGE_SIZE;
|
|
3381
|
+
}
|
|
3382
|
+
return out;
|
|
3383
|
+
}
|
|
3384
|
+
var chainAssetCache = /* @__PURE__ */ new Map();
|
|
3385
|
+
async function ensureMorphoChainAssetCache(chainId) {
|
|
3386
|
+
const hit = chainAssetCache.get(chainId);
|
|
3387
|
+
if (hit) return hit;
|
|
3388
|
+
const modes = /* @__PURE__ */ new Map();
|
|
3389
|
+
const [v1Vaults, v2Assets] = await Promise.all([
|
|
3390
|
+
fetchMorphoVaultsForChain(chainId, 300),
|
|
3391
|
+
fetchAllMorphoVaultV2AssetAddresses(chainId)
|
|
3392
|
+
]);
|
|
3393
|
+
for (const v of v1Vaults) {
|
|
3394
|
+
const a = (v.asset?.address ?? "").trim();
|
|
3395
|
+
if (!isAddress(a)) continue;
|
|
3396
|
+
const k = getAddress(a).toLowerCase();
|
|
3397
|
+
const prev = modes.get(k) ?? { earn: false, borrow: false, collateral: false };
|
|
3398
|
+
prev.earn = true;
|
|
3399
|
+
modes.set(k, prev);
|
|
3400
|
+
}
|
|
3401
|
+
for (const k of v2Assets) {
|
|
3402
|
+
const prev = modes.get(k) ?? { earn: false, borrow: false, collateral: false };
|
|
3403
|
+
prev.earn = true;
|
|
3404
|
+
modes.set(k, prev);
|
|
3405
|
+
}
|
|
3406
|
+
const marketsD = await morphoGql(
|
|
3407
|
+
`
|
|
3408
|
+
query MorphoMarketsAssets($chainId: Int!) {
|
|
3409
|
+
markets(first: 500, where: { chainId_in: [$chainId] }) {
|
|
3410
|
+
items {
|
|
3411
|
+
loanAsset { address }
|
|
3412
|
+
collateralAsset { address }
|
|
3413
|
+
}
|
|
3414
|
+
}
|
|
3415
|
+
}
|
|
3416
|
+
`,
|
|
3417
|
+
{ chainId }
|
|
3418
|
+
);
|
|
3419
|
+
for (const m of marketsD.markets?.items ?? []) {
|
|
3420
|
+
const loanAddr = (m.loanAsset?.address ?? "").trim();
|
|
3421
|
+
const colAddr = (m.collateralAsset?.address ?? "").trim();
|
|
3422
|
+
if (isAddress(loanAddr)) {
|
|
3423
|
+
const k = getAddress(loanAddr).toLowerCase();
|
|
3424
|
+
const prev = modes.get(k) ?? { earn: false, borrow: false, collateral: false };
|
|
3425
|
+
prev.borrow = true;
|
|
3426
|
+
modes.set(k, prev);
|
|
3427
|
+
}
|
|
3428
|
+
if (isAddress(colAddr)) {
|
|
3429
|
+
const k = getAddress(colAddr).toLowerCase();
|
|
3430
|
+
const prev = modes.get(k) ?? { earn: false, borrow: false, collateral: false };
|
|
3431
|
+
prev.collateral = true;
|
|
3432
|
+
modes.set(k, prev);
|
|
3433
|
+
}
|
|
3434
|
+
}
|
|
3435
|
+
const cache = { modesByUnderlying: modes, nativeWrapped: null };
|
|
3436
|
+
chainAssetCache.set(chainId, cache);
|
|
3437
|
+
return cache;
|
|
3438
|
+
}
|
|
3439
|
+
|
|
3440
|
+
// src/protocols/evm/morpho/index.ts
|
|
3441
|
+
var MORPHO_PROTOCOL_ID = "morpho";
|
|
3442
|
+
var morphoProtocolModule = {
|
|
3443
|
+
id: MORPHO_PROTOCOL_ID,
|
|
3444
|
+
chainCategory: "evm",
|
|
3445
|
+
isChainSupported(ctx) {
|
|
3446
|
+
return ctx.chainCategory === "evm";
|
|
3447
|
+
},
|
|
3448
|
+
isTokenSupported(token) {
|
|
3449
|
+
return token.category === "evm" && (token.kind === "native" || token.kind === "erc20");
|
|
3450
|
+
},
|
|
3451
|
+
actions: [
|
|
3452
|
+
{ id: "morpho.fetch-earn-vaults", protocolId: MORPHO_PROTOCOL_ID, chainCategory: "evm", description: "Search Morpho-listed earn vaults by asset or name", commonParams: [], params: {} },
|
|
3453
|
+
{ id: "morpho.vault-deposit", protocolId: MORPHO_PROTOCOL_ID, chainCategory: "evm", description: "Deposit into Morpho-listed earn vault (V1 or V2)", commonParams: ["keyGen", "purposeText", "useCustomGas"], params: {} },
|
|
3454
|
+
{ id: "morpho.vault-withdraw", protocolId: MORPHO_PROTOCOL_ID, chainCategory: "evm", description: "Withdraw from Morpho earn vault (V1 or V2)", commonParams: ["keyGen", "purposeText", "useCustomGas"], params: {} },
|
|
3455
|
+
{ id: "morpho.blue-collateral-deposit", protocolId: MORPHO_PROTOCOL_ID, chainCategory: "evm", description: "Supply collateral to Morpho Blue market", commonParams: ["keyGen", "purposeText", "useCustomGas"], params: {} },
|
|
3456
|
+
{ id: "morpho.blue-borrow", protocolId: MORPHO_PROTOCOL_ID, chainCategory: "evm", description: "Borrow from Morpho Blue market", commonParams: ["keyGen", "purposeText", "useCustomGas"], params: {} },
|
|
3457
|
+
{ id: "morpho.blue-repay", protocolId: MORPHO_PROTOCOL_ID, chainCategory: "evm", description: "Repay Morpho Blue borrow", commonParams: ["keyGen", "purposeText", "useCustomGas"], params: {} },
|
|
3458
|
+
{ id: "morpho.blue-collateral-withdraw", protocolId: MORPHO_PROTOCOL_ID, chainCategory: "evm", description: "Withdraw Morpho Blue collateral", commonParams: ["keyGen", "purposeText", "useCustomGas"], params: {} },
|
|
3459
|
+
{ id: "morpho.merkl-claim", protocolId: MORPHO_PROTOCOL_ID, chainCategory: "evm", description: "Claim Morpho Merkl rewards", commonParams: ["keyGen", "purposeText", "useCustomGas"], params: {} },
|
|
3460
|
+
{ id: "morpho.midnight-borrow", protocolId: MORPHO_PROTOCOL_ID, chainCategory: "evm", description: "Morpho Midnight fixed-rate borrow (coming soon)", commonParams: ["keyGen", "purposeText", "useCustomGas"], params: {} }
|
|
3461
|
+
]
|
|
3462
|
+
};
|
|
3463
|
+
registerProtocolModule(morphoProtocolModule);
|
|
2413
3464
|
var skillsDir = join(dirname(fileURLToPath(import.meta.url)), "skills");
|
|
2414
3465
|
var SKILL_PROTOCOL_IDS = [
|
|
2415
3466
|
"aave-v4",
|
|
@@ -2420,7 +3471,9 @@ var SKILL_PROTOCOL_IDS = [
|
|
|
2420
3471
|
"euler-v2",
|
|
2421
3472
|
"maple-syrup",
|
|
2422
3473
|
"sky",
|
|
2423
|
-
"gmx"
|
|
3474
|
+
"gmx",
|
|
3475
|
+
"hyperliquid",
|
|
3476
|
+
"morpho"
|
|
2424
3477
|
];
|
|
2425
3478
|
function getToolsForProtocol(protocolId) {
|
|
2426
3479
|
return MCP_TOOL_DEFINITIONS.filter((t) => t.protocolId === protocolId);
|
|
@@ -2634,6 +3687,37 @@ var PROTOCOL_SUPPORT_ADVISORS = {
|
|
|
2634
3687
|
return { tokens: [] };
|
|
2635
3688
|
}
|
|
2636
3689
|
}),
|
|
3690
|
+
morpho: advisor("morpho", "api_underlyings", {
|
|
3691
|
+
async supportedChainIds() {
|
|
3692
|
+
const set = await loadMorphoSupportedChainIds();
|
|
3693
|
+
return [...set].sort((a, b) => a - b);
|
|
3694
|
+
},
|
|
3695
|
+
async supportedTokens(chainId) {
|
|
3696
|
+
const cache = await ensureMorphoChainAssetCache(chainId);
|
|
3697
|
+
const tokens = [...cache.modesByUnderlying.entries()].map(([address, modes]) => ({
|
|
3698
|
+
address,
|
|
3699
|
+
roles: [
|
|
3700
|
+
...modes.earn ? ["vault_underlying"] : [],
|
|
3701
|
+
...modes.borrow ? ["loan"] : [],
|
|
3702
|
+
...modes.collateral ? ["collateral"] : []
|
|
3703
|
+
]
|
|
3704
|
+
}));
|
|
3705
|
+
return {
|
|
3706
|
+
tokens,
|
|
3707
|
+
notes: "Morpho vault assets and Blue market loan/collateral tokens from api.morpho.org."
|
|
3708
|
+
};
|
|
3709
|
+
},
|
|
3710
|
+
async isTokenSupported(chainId, address) {
|
|
3711
|
+
const cache = await ensureMorphoChainAssetCache(chainId);
|
|
3712
|
+
let normalized;
|
|
3713
|
+
try {
|
|
3714
|
+
normalized = getAddress(address).toLowerCase();
|
|
3715
|
+
} catch {
|
|
3716
|
+
return false;
|
|
3717
|
+
}
|
|
3718
|
+
return cache.modesByUnderlying.has(normalized);
|
|
3719
|
+
}
|
|
3720
|
+
}),
|
|
2637
3721
|
"euler-v2": advisor("euler-v2", "subgraph_vaults", {
|
|
2638
3722
|
async supportedChainIds() {
|
|
2639
3723
|
return [...EULER_V2_SUBGRAPH_CHAIN_IDS];
|
|
@@ -2714,6 +3798,8 @@ registerProtocolModule(skyProtocolModule);
|
|
|
2714
3798
|
registerProtocolModule(aaveV4ProtocolModule);
|
|
2715
3799
|
registerProtocolModule(eulerV2ProtocolModule);
|
|
2716
3800
|
registerProtocolModule(gmxProtocolModule);
|
|
3801
|
+
registerProtocolModule(hyperliquidProtocolModule);
|
|
3802
|
+
registerProtocolModule(morphoProtocolModule);
|
|
2717
3803
|
function getAgentCatalog() {
|
|
2718
3804
|
return {
|
|
2719
3805
|
protocols: getProtocolModules(),
|
|
@@ -2731,11 +3817,13 @@ function getAgentCatalog() {
|
|
|
2731
3817
|
aaveV4: aaveV4ProtocolModule,
|
|
2732
3818
|
eulerV2: eulerV2ProtocolModule,
|
|
2733
3819
|
gmx: gmxProtocolModule,
|
|
3820
|
+
hyperliquid: hyperliquidProtocolModule,
|
|
3821
|
+
morpho: morphoProtocolModule,
|
|
2734
3822
|
/** Prefer getAgentCatalogForMcp() or getMcpToolDefinitions() for MCP servers. */
|
|
2735
3823
|
mcp: getAgentCatalogForMcp()
|
|
2736
3824
|
};
|
|
2737
3825
|
}
|
|
2738
3826
|
|
|
2739
|
-
export { EVM_COMMON_PARAM_DOCS, MANAGEMENT_SIG_DOC, MCP_NON_SUBMIT_TOOL_NAMES, MCP_TOOL_DEFINITIONS, MCP_TOOL_INPUT_SCHEMAS, MCP_TOOL_OUTPUT_SCHEMAS, MULTISIGN_OUTPUT_DOC, MULTISIGN_SUBMIT_OUTPUT_DOC, PROTOCOL_SUPPORT_ADVISORS, chainDetailSchema, evmAddressSchema, evmMultisignCommonInputSchema, getActionsByChainCategory, getAgentCatalog, getAgentCatalogForMcp, getMcpToolByName, getMcpToolDefinitions, getMcpToolInputSchema, getMcpToolOutputSchema, getProtocolDiscoverySummary, getProtocolModules, getProtocolSkill, getProtocolSupportAdvisor, getToolsForProtocol, jsonObjectSchema, keyGenSchema, listProtocolSupportAdvisorIds, listProtocolsWithSkills, mcpAaveV4BorrowInputSchema, mcpAaveV4DepositInputSchema, mcpAaveV4RepayInputSchema, mcpAaveV4WithdrawInputSchema, mcpCurveDaoBuildSwapMultisignInputSchema, mcpCurveDaoQuoteInputSchema, mcpCurveDaoQuoteOutputSchema, mcpEthenaClaimInputSchema, mcpEthenaCooldownInputSchema, mcpEthenaRedeemInputSchema, mcpEthenaStakeInputSchema, mcpEulerV2BorrowRepayInputSchema, mcpEulerV2CollateralDepositInputSchema, mcpEulerV2CollateralWithdrawInputSchema, mcpEulerV2IsolatedBorrowInputSchema, mcpEulerV2IsolatedLendInputSchema, mcpEulerV2VaultWithdrawInputSchema, mcpGmxCancelInputSchema, mcpGmxDecreaseInputSchema, mcpGmxFetchGmApyInputSchema, mcpGmxFetchGmApyOutputSchema, mcpGmxFetchGmMarketsInputSchema, mcpGmxFetchGmMarketsOutputSchema, mcpGmxFetchMarketPricesInputSchema, mcpGmxFetchMarketPricesOutputSchema, mcpGmxFetchMarketsInputSchema, mcpGmxFetchMarketsOutputSchema, mcpGmxFetchOhlcvInputSchema, mcpGmxFetchOhlcvOutputSchema, mcpGmxFetchPositionsInputSchema, mcpGmxFetchPositionsOutputSchema, mcpGmxFetchStakingPowerInputSchema, mcpGmxFetchStakingPowerOutputSchema, mcpGmxGmDepositInputSchema, mcpGmxGmWithdrawInputSchema, mcpGmxIncreaseInputSchema, mcpServerSubmitOutputSchema as mcpGmxMultisignOutputSchema, mcpGmxStakeGmxInputSchema, mcpGmxUnstakeGmxInputSchema, mcpLidoClaimWithdrawalInputSchema, mcpLidoRequestWithdrawalsInputSchema, mcpLidoSubmitInputSchema, mcpLidoUnwrapWstEthInputSchema, mcpLidoWrapStEthInputSchema, mcpMapleDepositInputSchema, mcpMapleRequestRedeemInputSchema, mcpMultisignInput, multisignOutputSchema as mcpMultisignOutputSchema, mcpServerSubmitOutputSchema as mcpMultisignSubmitOutputSchema, mcpServerCommonInputSchema, mcpServerMultisignInput, mcpServerSubmitOutputSchema, mcpSkyLockstakeCloseInputSchema, mcpSkyLockstakeDrawInputSchema, mcpSkyLockstakeGetRewardInputSchema, mcpSkyLockstakeStakeInputSchema, mcpSkyLockstakeWipeInputSchema, mcpSkySusdsDepositInputSchema, mcpSkySusdsRedeemInputSchema, mcpUniswapV4BuildCollectFeesMultisignInputSchema, mcpUniswapV4BuildDecreaseLiquidityMultisignInputSchema, mcpUniswapV4BuildIncreaseLiquidityMultisignInputSchema, mcpUniswapV4BuildMintLiquidityMultisignInputSchema, mcpUniswapV4BuildSwapMultisignInputSchema, mcpUniswapV4CreateSwapInputSchema, mcpUniswapV4CreateSwapOutputSchema, mcpUniswapV4LpClaimInputSchema, mcpUniswapV4LpClaimOutputSchema, mcpUniswapV4LpCreatePositionInputSchema, mcpUniswapV4LpCreatePositionOutputSchema, mcpUniswapV4LpDecreaseInputSchema, mcpUniswapV4LpDecreaseOutputSchema, mcpUniswapV4LpIncreaseInputSchema, mcpUniswapV4LpIncreaseOutputSchema, mcpUniswapV4LpListPoolsInputSchema, mcpUniswapV4LpListPoolsOutputSchema, mcpUniswapV4LpListPositionsInputSchema, mcpUniswapV4LpListPositionsOutputSchema, mcpUniswapV4QuoteInputSchema, mcpUniswapV4QuoteOutputSchema, mcpUniswapV4RegisterPositionFromMintTxInputSchema, mcpUniswapV4RegisterPositionFromMintTxOutputSchema, mcpUniswapV4RegisterPositionNftInputSchema, mcpUniswapV4RegisterPositionNftOutputSchema, multisignOutputSchema, parseMcpToolInput, parseMcpToolOutput, parseMultisignBuilderOutput, uniswapQuoteTradeTypeSchema, zodSchemaToMcpJsonSchema };
|
|
3827
|
+
export { EVM_COMMON_PARAM_DOCS, MANAGEMENT_SIG_DOC, MCP_NON_SUBMIT_TOOL_NAMES, MCP_TOOL_DEFINITIONS, MCP_TOOL_INPUT_SCHEMAS, MCP_TOOL_OUTPUT_SCHEMAS, MULTISIGN_OUTPUT_DOC, MULTISIGN_SUBMIT_OUTPUT_DOC, PROTOCOL_SUPPORT_ADVISORS, chainDetailSchema, evmAddressSchema, evmMultisignCommonInputSchema, getActionsByChainCategory, getAgentCatalog, getAgentCatalogForMcp, getMcpToolByName, getMcpToolDefinitions, getMcpToolInputSchema, getMcpToolOutputSchema, getProtocolDiscoverySummary, getProtocolModules, getProtocolSkill, getProtocolSupportAdvisor, getToolsForProtocol, jsonObjectSchema, keyGenSchema, listProtocolSupportAdvisorIds, listProtocolsWithSkills, mcpAaveV4BorrowInputSchema, mcpAaveV4DepositInputSchema, mcpAaveV4RepayInputSchema, mcpAaveV4WithdrawInputSchema, mcpCurveDaoBuildSwapMultisignInputSchema, mcpCurveDaoQuoteInputSchema, mcpCurveDaoQuoteOutputSchema, mcpEthenaClaimInputSchema, mcpEthenaCooldownInputSchema, mcpEthenaRedeemInputSchema, mcpEthenaStakeInputSchema, mcpEulerV2BorrowRepayInputSchema, mcpEulerV2CollateralDepositInputSchema, mcpEulerV2CollateralWithdrawInputSchema, mcpEulerV2IsolatedBorrowInputSchema, mcpEulerV2IsolatedLendInputSchema, mcpEulerV2VaultWithdrawInputSchema, mcpGmxCancelInputSchema, mcpGmxDecreaseInputSchema, mcpGmxFetchGmApyInputSchema, mcpGmxFetchGmApyOutputSchema, mcpGmxFetchGmMarketsInputSchema, mcpGmxFetchGmMarketsOutputSchema, mcpGmxFetchMarketPricesInputSchema, mcpGmxFetchMarketPricesOutputSchema, mcpGmxFetchMarketsInputSchema, mcpGmxFetchMarketsOutputSchema, mcpGmxFetchOhlcvInputSchema, mcpGmxFetchOhlcvOutputSchema, mcpGmxFetchPositionsInputSchema, mcpGmxFetchPositionsOutputSchema, mcpGmxFetchStakingPowerInputSchema, mcpGmxFetchStakingPowerOutputSchema, mcpGmxGmDepositInputSchema, mcpGmxGmWithdrawInputSchema, mcpGmxIncreaseInputSchema, mcpServerSubmitOutputSchema as mcpGmxMultisignOutputSchema, mcpGmxStakeGmxInputSchema, mcpGmxUnstakeGmxInputSchema, mcpHyperliquidCancelInputSchema, mcpHyperliquidCloseInputSchema, mcpHyperliquidDelegateInputSchema, mcpHyperliquidFetchDelegationsInputSchema, mcpHyperliquidFetchDelegationsOutputSchema, mcpHyperliquidFetchMarketSnapshotInputSchema, mcpHyperliquidFetchMarketSnapshotOutputSchema, mcpHyperliquidFetchMarketsInputSchema, mcpHyperliquidFetchMarketsOutputSchema, mcpHyperliquidFetchOhlcvInputSchema, mcpHyperliquidFetchOhlcvOutputSchema, mcpHyperliquidFetchOpenContextInputSchema, mcpHyperliquidFetchOpenContextOutputSchema, mcpHyperliquidFetchOpenOrdersInputSchema, mcpHyperliquidFetchOpenOrdersOutputSchema, mcpHyperliquidFetchPositionsInputSchema, mcpHyperliquidFetchPositionsOutputSchema, mcpHyperliquidFetchStakingSummaryInputSchema, mcpHyperliquidFetchStakingSummaryOutputSchema, mcpHyperliquidFetchUsdClassBalancesInputSchema, mcpHyperliquidFetchUsdClassBalancesOutputSchema, mcpHyperliquidFetchUserVaultEquitiesInputSchema, mcpHyperliquidFetchUserVaultEquitiesOutputSchema, mcpHyperliquidFetchVaultsInputSchema, mcpHyperliquidFetchVaultsOutputSchema, mcpHyperliquidLimitOrderInputSchema, mcpHyperliquidSearchMarketsInputSchema, mcpHyperliquidSearchMarketsOutputSchema, mcpHyperliquidStakeInputSchema, mcpHyperliquidUndelegateInputSchema, mcpHyperliquidUnstakeInputSchema, mcpHyperliquidUsdTransferInputSchema, mcpHyperliquidVaultDepositInputSchema, mcpHyperliquidVaultWithdrawInputSchema, mcpLidoClaimWithdrawalInputSchema, mcpLidoRequestWithdrawalsInputSchema, mcpLidoSubmitInputSchema, mcpLidoUnwrapWstEthInputSchema, mcpLidoWrapStEthInputSchema, mcpMapleDepositInputSchema, mcpMapleRequestRedeemInputSchema, mcpMorphoBlueBorrowInputSchema, mcpMorphoBlueCollateralDepositInputSchema, mcpMorphoBlueCollateralWithdrawInputSchema, mcpMorphoBlueRepayInputSchema, mcpMorphoFetchEarnVaultsInputSchema, mcpMorphoFetchEarnVaultsOutputSchema, mcpMorphoMerklClaimInputSchema, mcpMorphoVaultDepositInputSchema, mcpMorphoVaultWithdrawInputSchema, mcpMultisignInput, multisignOutputSchema as mcpMultisignOutputSchema, mcpServerSubmitOutputSchema as mcpMultisignSubmitOutputSchema, mcpServerCommonInputSchema, mcpServerMultisignInput, mcpServerSubmitOutputSchema, mcpSkyLockstakeCloseInputSchema, mcpSkyLockstakeDrawInputSchema, mcpSkyLockstakeGetRewardInputSchema, mcpSkyLockstakeStakeInputSchema, mcpSkyLockstakeWipeInputSchema, mcpSkySusdsDepositInputSchema, mcpSkySusdsRedeemInputSchema, mcpUniswapV4BuildCollectFeesMultisignInputSchema, mcpUniswapV4BuildDecreaseLiquidityMultisignInputSchema, mcpUniswapV4BuildIncreaseLiquidityMultisignInputSchema, mcpUniswapV4BuildMintLiquidityMultisignInputSchema, mcpUniswapV4BuildSwapMultisignInputSchema, mcpUniswapV4CreateSwapInputSchema, mcpUniswapV4CreateSwapOutputSchema, mcpUniswapV4LpClaimInputSchema, mcpUniswapV4LpClaimOutputSchema, mcpUniswapV4LpCreatePositionInputSchema, mcpUniswapV4LpCreatePositionOutputSchema, mcpUniswapV4LpDecreaseInputSchema, mcpUniswapV4LpDecreaseOutputSchema, mcpUniswapV4LpIncreaseInputSchema, mcpUniswapV4LpIncreaseOutputSchema, mcpUniswapV4LpListPoolsInputSchema, mcpUniswapV4LpListPoolsOutputSchema, mcpUniswapV4LpListPositionsInputSchema, mcpUniswapV4LpListPositionsOutputSchema, mcpUniswapV4QuoteInputSchema, mcpUniswapV4QuoteOutputSchema, mcpUniswapV4RegisterPositionFromMintTxInputSchema, mcpUniswapV4RegisterPositionFromMintTxOutputSchema, mcpUniswapV4RegisterPositionNftInputSchema, mcpUniswapV4RegisterPositionNftOutputSchema, multisignOutputSchema, parseMcpToolInput, parseMcpToolOutput, parseMultisignBuilderOutput, uniswapQuoteTradeTypeSchema, zodSchemaToMcpJsonSchema };
|
|
2740
3828
|
//# sourceMappingURL=catalog.js.map
|
|
2741
3829
|
//# sourceMappingURL=catalog.js.map
|