@continuumdao/ctm-mpc-defi 0.2.7 → 0.2.9

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.
@@ -382,7 +382,7 @@ var EVM_COMMON_PARAM_DOCS = {
382
382
  useCustomGas: {
383
383
  type: "boolean",
384
384
  required: true,
385
- description: "When true, apply chain gas settings from chainDetail / customGasChainDetails instead of raw RPC estimates only."
385
+ description: "When true, apply Custom Gas Config from chainDetail / customGasChainDetails. Omitted baseFee/priorityFee is valid \u2014 live RPC fees are used at proposal; configured values are optional floors/multipliers. When false, use live RPC estimates only."
386
386
  },
387
387
  chainId: {
388
388
  type: "number",
@@ -410,8 +410,17 @@ var EVM_COMMON_PARAM_DOCS = {
410
410
  description: "Snapshot written to extraJSON.customGasChainDetails when useCustomGas is true."
411
411
  }
412
412
  };
413
+ var MULTISIGN_SUBMIT_OUTPUT_DOC = {
414
+ description: "Submitted mpc-auth multiSignRequest id. continuum-mcp-server builds, signs the management envelope, and POSTs /multiSignRequest. Continue with wait_for_sign_request_ready \u2192 sign_request_agree \u2192 trigger_sign_result \u2192 broadcast_sign_result. Do not call the same build tool again if requestId was returned.",
415
+ fields: {
416
+ requestId: {
417
+ type: "string",
418
+ description: "Sign request id from POST /multiSignRequest."
419
+ }
420
+ }
421
+ };
413
422
  var MULTISIGN_OUTPUT_DOC = {
414
- description: "Unsigned mpc-auth multiSignRequest payload. The caller must sign messageToSign (MetaMask personal_sign or Ed25519) and POST { ...bodyForSign, clientSig, signedMessage: messageToSign } to /multiSignRequest.",
423
+ description: "Unsigned mpc-auth multiSignRequest payload from protocol builders. MCP agents receive { requestId } instead; node-app callers sign messageToSign and POST { ...bodyForSign, clientSig, signedMessage }.",
415
424
  fields: {
416
425
  bodyForSign: {
417
426
  type: "object",
@@ -460,6 +469,21 @@ var MANAGEMENT_SIG_DOC = {
460
469
  fetchPreferredKeyGen: "GET /getPreferredKeyGen for agent default KeyGen."
461
470
  }
462
471
  };
472
+
473
+ // src/agent/mcpMultisignSubmitMeta.ts
474
+ var MCP_MULTISIGN_SUBMIT_DESCRIPTION_SUFFIX = "Builds the unsigned batch, signs the management envelope, and POSTs /multiSignRequest. Returns { requestId } on success \u2014 do not call again; use list_sign_requests to verify duplicates.";
475
+ var MCP_MULTISIGN_SUBMIT_FOLLOW_UP = [
476
+ "wait_for_sign_request_ready",
477
+ "sign_request_agree",
478
+ "trigger_sign_result",
479
+ "broadcast_sign_result"
480
+ ];
481
+ function withMultisignSubmitMcpMeta(description, followUp = MCP_MULTISIGN_SUBMIT_FOLLOW_UP) {
482
+ return {
483
+ description: `${description.trim()} ${MCP_MULTISIGN_SUBMIT_DESCRIPTION_SUFFIX}`,
484
+ followUp: [...followUp]
485
+ };
486
+ }
463
487
  function zodSchemaToMcpJsonSchema(schema) {
464
488
  const raw = zodToJsonSchema.zodToJsonSchema(schema, {
465
489
  target: "openApi3",
@@ -504,7 +528,7 @@ var evmMultisignCommonInputSchema = zod.z.object({
504
528
  "Human-readable purpose for the sign request. Stored in bodyForSign.purpose (may be appended with an automatic batch suffix)."
505
529
  ),
506
530
  useCustomGas: zod.z.boolean().describe(
507
- "When true, apply chain gas settings from chainDetail / customGasChainDetails instead of raw RPC estimates only."
531
+ "When true, apply Custom Gas Config from chainDetail / customGasChainDetails. Omitted baseFee/priorityFee is valid \u2014 builder uses live RPC fees; configured values are optional floors/multipliers. When false, use live RPC estimates only."
508
532
  ),
509
533
  chainId: zod.z.number().int().positive().describe("EVM chain id (decimal). Becomes destinationChainID on the sign request."),
510
534
  rpcUrl: zod.z.string().min(1).describe("HTTPS JSON-RPC URL for gas estimation, nonce, and allowance reads."),
@@ -520,9 +544,12 @@ var multisignOutputSchema = zod.z.object({
520
544
  ),
521
545
  messageToSign: zod.z.string().describe("JSON.stringify(bodyForSign) \u2014 exact string to sign before adding clientSig.")
522
546
  }).describe(
523
- "Unsigned mpc-auth multiSignRequest payload. Sign messageToSign and POST { ...bodyForSign, clientSig, signedMessage } to /multiSignRequest."
547
+ "Unsigned mpc-auth multiSignRequest payload from protocol builders (used internally before management submit)."
524
548
  );
525
549
  var jsonObjectSchema = zod.z.record(zod.z.unknown());
550
+ function parseMultisignBuilderOutput(data) {
551
+ return multisignOutputSchema.parse(data);
552
+ }
526
553
  var uniswapQuoteTradeTypeSchema = zod.z.enum(["EXACT_INPUT", "EXACT_OUTPUT"]);
527
554
  var mcpUniswapV4QuoteInputSchema = zod.z.object({
528
555
  type: uniswapQuoteTradeTypeSchema.describe("EXACT_INPUT or EXACT_OUTPUT"),
@@ -741,6 +768,26 @@ var mcpCurveDaoBuildSwapMultisignInputSchema = evmMultisignCommonInputSchema.ext
741
768
  amountHuman: zod.z.string().min(1).describe("Human-readable amount of tokenIn"),
742
769
  slippagePercent: zod.z.number().gt(0).lt(100).describe("Slippage 0\u2013100 exclusive")
743
770
  });
771
+ var mcpServerCommonInputSchema = zod.z.object({
772
+ keyGenId: zod.z.string().min(1).describe("KeyGen id from fetch_key_gen_result / node preferred KeyGen"),
773
+ chainId: zod.z.number().int().positive().describe("EVM chain id; RPC and gas config resolved from chain registry"),
774
+ purposeText: zod.z.string().min(1).describe("Human-readable purpose for the sign request"),
775
+ useCustomGas: zod.z.boolean().optional().describe("Apply chain gas settings from registry when true")
776
+ });
777
+ function mcpServerMultisignInput(fields) {
778
+ return mcpServerCommonInputSchema.extend(fields);
779
+ }
780
+ var mcpServerSubmitOutputSchema = zod.z.object({
781
+ requestId: zod.z.string().min(1).describe("Sign request id from POST /multiSignRequest \u2014 success; do not retry the same build tool.")
782
+ }).describe(
783
+ "Submitted mpc-auth multiSignRequest. Continue with wait_for_sign_request_ready \u2192 sign_request_agree \u2192 trigger_sign_result \u2192 broadcast_sign_result."
784
+ );
785
+ var MCP_NON_SUBMIT_TOOL_NAMES = /* @__PURE__ */ new Set([
786
+ "ctm_uniswap_v4_quote",
787
+ "ctm_uniswap_v4_create_swap"
788
+ ]);
789
+
790
+ // src/agent/schemas/protocols.ts
744
791
  function mcpMultisignInput(fields) {
745
792
  return evmMultisignCommonInputSchema.extend(fields);
746
793
  }
@@ -1028,16 +1075,254 @@ var mcpGmxFetchOhlcvOutputSchema = zod.z.object({
1028
1075
  timeframe: gmxOhlcvTimeframeSchema,
1029
1076
  candles: zod.z.array(gmxOhlcvCandleSchema)
1030
1077
  });
1078
+ function mcpHyperliquidMultisignInput(fields) {
1079
+ return evmMultisignCommonInputSchema.extend(fields);
1080
+ }
1081
+ var hyperliquidTifSchema = zod.z.enum(["alo", "gtc", "ioc"]);
1082
+ var hyperliquidOhlcvIntervalSchema = zod.z.enum([
1083
+ "1m",
1084
+ "3m",
1085
+ "5m",
1086
+ "15m",
1087
+ "30m",
1088
+ "1h",
1089
+ "2h",
1090
+ "4h",
1091
+ "8h",
1092
+ "12h",
1093
+ "1d",
1094
+ "3d",
1095
+ "1w",
1096
+ "1M"
1097
+ ]);
1098
+ var hyperliquidPositionRowSchema = zod.z.object({
1099
+ key: zod.z.string(),
1100
+ coin: zod.z.string(),
1101
+ isLong: zod.z.boolean(),
1102
+ size: zod.z.string().nullable(),
1103
+ entryPx: zod.z.string().nullable(),
1104
+ positionValueUsd: zod.z.string().nullable(),
1105
+ unrealizedPnlUsd: zod.z.string().nullable(),
1106
+ liquidationPx: zod.z.string().nullable(),
1107
+ leverageLabel: zod.z.string().nullable(),
1108
+ maxLeverage: zod.z.number().nullable(),
1109
+ marginUsedUsd: zod.z.string().nullable(),
1110
+ returnOnEquity: zod.z.string().nullable()
1111
+ });
1112
+ var hyperliquidActiveAssetSchema = zod.z.object({
1113
+ markPx: zod.z.string().nullable(),
1114
+ leverageLabel: zod.z.string().nullable(),
1115
+ availableToBuy: zod.z.string().nullable(),
1116
+ availableToSell: zod.z.string().nullable()
1117
+ });
1118
+ var hyperliquidAccountSummarySchema = zod.z.object({
1119
+ accountValueUsd: zod.z.string().nullable(),
1120
+ totalMarginUsedUsd: zod.z.string().nullable(),
1121
+ withdrawableUsd: zod.z.string().nullable()
1122
+ });
1123
+ var mcpHyperliquidFetchMarketsInputSchema = zod.z.object({
1124
+ chainId: zod.z.number().int().positive(),
1125
+ dex: zod.z.string().optional()
1126
+ });
1127
+ var mcpHyperliquidFetchMarketsOutputSchema = zod.z.object({
1128
+ markets: zod.z.array(
1129
+ zod.z.object({
1130
+ name: zod.z.string(),
1131
+ asset: zod.z.number(),
1132
+ szDecimals: zod.z.number(),
1133
+ maxLeverage: zod.z.number(),
1134
+ onlyIsolated: zod.z.boolean().optional()
1135
+ })
1136
+ ),
1137
+ dexes: zod.z.array(
1138
+ zod.z.object({
1139
+ name: zod.z.string(),
1140
+ fullName: zod.z.string()
1141
+ })
1142
+ )
1143
+ });
1144
+ var mcpHyperliquidFetchOpenContextInputSchema = zod.z.object({
1145
+ chainId: zod.z.number().int().positive(),
1146
+ executorAddress: evmAddressSchema,
1147
+ coin: zod.z.string().min(1),
1148
+ dex: zod.z.string().optional()
1149
+ });
1150
+ var mcpHyperliquidFetchOpenContextOutputSchema = zod.z.object({
1151
+ context: zod.z.object({
1152
+ account: hyperliquidAccountSummarySchema,
1153
+ activeAsset: hyperliquidActiveAssetSchema
1154
+ })
1155
+ });
1156
+ var mcpHyperliquidFetchPositionsInputSchema = zod.z.object({
1157
+ chainId: zod.z.number().int().positive(),
1158
+ executorAddress: evmAddressSchema,
1159
+ dex: zod.z.string().optional()
1160
+ });
1161
+ var mcpHyperliquidFetchPositionsOutputSchema = zod.z.object({
1162
+ positions: zod.z.array(hyperliquidPositionRowSchema)
1163
+ });
1164
+ var mcpHyperliquidFetchOpenOrdersInputSchema = zod.z.object({
1165
+ chainId: zod.z.number().int().positive(),
1166
+ executorAddress: evmAddressSchema,
1167
+ dex: zod.z.string().optional()
1168
+ });
1169
+ var mcpHyperliquidFetchOpenOrdersOutputSchema = zod.z.object({
1170
+ orders: zod.z.array(
1171
+ zod.z.object({
1172
+ coin: zod.z.string(),
1173
+ side: zod.z.string(),
1174
+ limitPx: zod.z.string(),
1175
+ sz: zod.z.string(),
1176
+ oid: zod.z.number(),
1177
+ timestamp: zod.z.number(),
1178
+ reduceOnly: zod.z.boolean().optional()
1179
+ })
1180
+ )
1181
+ });
1182
+ var mcpHyperliquidFetchMarketSnapshotInputSchema = zod.z.object({
1183
+ chainId: zod.z.number().int().positive(),
1184
+ coin: zod.z.string().min(1),
1185
+ interval: hyperliquidOhlcvIntervalSchema.optional(),
1186
+ dex: zod.z.string().optional()
1187
+ });
1188
+ var mcpHyperliquidFetchMarketSnapshotOutputSchema = zod.z.object({
1189
+ snapshot: zod.z.object({
1190
+ coin: zod.z.string(),
1191
+ midUsd: zod.z.string().nullable(),
1192
+ fetchedAtMs: zod.z.number(),
1193
+ interval: hyperliquidOhlcvIntervalSchema,
1194
+ candles: zod.z.array(
1195
+ zod.z.object({
1196
+ timestampMs: zod.z.number(),
1197
+ open: zod.z.string(),
1198
+ high: zod.z.string(),
1199
+ low: zod.z.string(),
1200
+ close: zod.z.string(),
1201
+ volume: zod.z.string()
1202
+ })
1203
+ )
1204
+ })
1205
+ });
1206
+ var mcpHyperliquidFetchUsdClassBalancesInputSchema = zod.z.object({
1207
+ chainId: zod.z.number().int().positive(),
1208
+ executorAddress: evmAddressSchema
1209
+ });
1210
+ var mcpHyperliquidFetchUsdClassBalancesOutputSchema = zod.z.object({
1211
+ balances: zod.z.object({
1212
+ spotUsdcAvailable: zod.z.string(),
1213
+ perpWithdrawable: zod.z.string()
1214
+ })
1215
+ });
1216
+ var mcpHyperliquidFetchVaultsInputSchema = zod.z.object({
1217
+ chainId: zod.z.number().int().positive(),
1218
+ executorAddress: evmAddressSchema.optional()
1219
+ });
1220
+ var mcpHyperliquidFetchVaultsOutputSchema = zod.z.object({
1221
+ vaults: zod.z.array(
1222
+ zod.z.object({
1223
+ vaultAddress: zod.z.string(),
1224
+ name: zod.z.string(),
1225
+ apr: zod.z.number().nullable(),
1226
+ tvlUsd: zod.z.string().nullable()
1227
+ })
1228
+ )
1229
+ });
1230
+ var mcpHyperliquidFetchUserVaultEquitiesInputSchema = zod.z.object({
1231
+ chainId: zod.z.number().int().positive(),
1232
+ executorAddress: evmAddressSchema
1233
+ });
1234
+ var mcpHyperliquidFetchUserVaultEquitiesOutputSchema = zod.z.object({
1235
+ rows: zod.z.array(
1236
+ zod.z.object({
1237
+ vaultAddress: zod.z.string(),
1238
+ equity: zod.z.string()
1239
+ })
1240
+ )
1241
+ });
1242
+ var mcpHyperliquidFetchStakingSummaryInputSchema = zod.z.object({
1243
+ chainId: zod.z.number().int().positive(),
1244
+ executorAddress: evmAddressSchema
1245
+ });
1246
+ var mcpHyperliquidFetchStakingSummaryOutputSchema = zod.z.object({
1247
+ summary: zod.z.object({
1248
+ delegated: zod.z.string(),
1249
+ undelegated: zod.z.string()
1250
+ })
1251
+ });
1252
+ var mcpHyperliquidFetchDelegationsInputSchema = zod.z.object({
1253
+ chainId: zod.z.number().int().positive(),
1254
+ executorAddress: evmAddressSchema
1255
+ });
1256
+ var mcpHyperliquidFetchDelegationsOutputSchema = zod.z.object({
1257
+ delegations: zod.z.array(
1258
+ zod.z.object({
1259
+ validator: zod.z.string(),
1260
+ amount: zod.z.string()
1261
+ })
1262
+ )
1263
+ });
1264
+ var mcpHyperliquidLimitOrderInputSchema = mcpHyperliquidMultisignInput({
1265
+ coin: zod.z.string().min(1),
1266
+ isBuy: zod.z.boolean(),
1267
+ limitPxHuman: zod.z.string().min(1),
1268
+ szHuman: zod.z.string().min(1),
1269
+ marketKind: zod.z.enum(["perp", "spot"]).optional(),
1270
+ tif: hyperliquidTifSchema.optional(),
1271
+ dex: zod.z.string().optional()
1272
+ });
1273
+ var mcpHyperliquidCloseInputSchema = mcpHyperliquidMultisignInput({
1274
+ coin: zod.z.string().min(1),
1275
+ isLong: zod.z.boolean(),
1276
+ limitPxHuman: zod.z.string().min(1),
1277
+ szHuman: zod.z.string().min(1),
1278
+ dex: zod.z.string().optional(),
1279
+ tif: hyperliquidTifSchema.optional()
1280
+ });
1281
+ var mcpHyperliquidCancelInputSchema = mcpHyperliquidMultisignInput({
1282
+ coin: zod.z.string().min(1),
1283
+ oid: zod.z.number().int().positive(),
1284
+ marketKind: zod.z.enum(["perp", "spot"]).optional(),
1285
+ dex: zod.z.string().optional()
1286
+ });
1287
+ var mcpHyperliquidUsdTransferInputSchema = mcpHyperliquidMultisignInput({
1288
+ usdHuman: zod.z.string().min(1),
1289
+ toPerp: zod.z.boolean()
1290
+ });
1291
+ var mcpHyperliquidVaultDepositInputSchema = mcpHyperliquidMultisignInput({
1292
+ vaultAddress: evmAddressSchema,
1293
+ usdHuman: zod.z.string().min(1)
1294
+ });
1295
+ var mcpHyperliquidVaultWithdrawInputSchema = mcpHyperliquidMultisignInput({
1296
+ vaultAddress: evmAddressSchema,
1297
+ usdHuman: zod.z.string().min(1)
1298
+ });
1299
+ var mcpHyperliquidStakeInputSchema = mcpHyperliquidMultisignInput({
1300
+ hypeHuman: zod.z.string().min(1)
1301
+ });
1302
+ var mcpHyperliquidUnstakeInputSchema = mcpHyperliquidMultisignInput({
1303
+ hypeHuman: zod.z.string().min(1)
1304
+ });
1305
+ var mcpHyperliquidDelegateInputSchema = mcpHyperliquidMultisignInput({
1306
+ hypeHuman: zod.z.string().min(1),
1307
+ validator: evmAddressSchema
1308
+ });
1309
+ var mcpHyperliquidUndelegateInputSchema = mcpHyperliquidMultisignInput({
1310
+ hypeHuman: zod.z.string().min(1),
1311
+ validator: evmAddressSchema
1312
+ });
1031
1313
 
1032
1314
  // src/agent/mcpProtocolTools.ts
1033
1315
  function defineProtocolMcpTool(def) {
1316
+ const meta = withMultisignSubmitMcpMeta(def.description, def.followUp ?? MCP_MULTISIGN_SUBMIT_FOLLOW_UP);
1034
1317
  return {
1035
1318
  ...def,
1036
- outputZod: multisignOutputSchema,
1319
+ description: meta.description,
1320
+ followUp: meta.followUp,
1321
+ outputZod: mcpServerSubmitOutputSchema,
1037
1322
  inputSchema: zodSchemaToMcpJsonSchema(def.inputZod),
1038
- outputSchema: zodSchemaToMcpJsonSchema(multisignOutputSchema),
1323
+ outputSchema: zodSchemaToMcpJsonSchema(mcpServerSubmitOutputSchema),
1039
1324
  parseInput: (data) => def.inputZod.parse(data),
1040
- parseOutput: (data) => multisignOutputSchema.parse(data)
1325
+ parseOutput: (data) => mcpServerSubmitOutputSchema.parse(data)
1041
1326
  };
1042
1327
  }
1043
1328
  var MCP_PROTOCOL_TOOL_DEFINITIONS = [
@@ -1046,9 +1331,8 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
1046
1331
  actionId: "lido.submit",
1047
1332
  protocolId: "lido",
1048
1333
  chainCategory: "evm",
1049
- description: "Build mpc-auth multiSignRequest for Lido ETH stake (submit).",
1334
+ description: "Create and submit mpc-auth multiSignRequest for Lido ETH stake (submit).",
1050
1335
  prerequisites: ["keyGen", "executorAddress", "RPC URL"],
1051
- followUp: ["Sign messageToSign", "POST /multiSignRequest"],
1052
1336
  handler: { importPath: "protocols/evm/lido", exportName: "buildEvmMultisignBodyLidoSubmit" },
1053
1337
  inputZod: mcpLidoSubmitInputSchema
1054
1338
  }),
@@ -1059,7 +1343,6 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
1059
1343
  chainCategory: "evm",
1060
1344
  description: "Build batch for Lido withdrawal queue (approve + requestWithdrawals).",
1061
1345
  prerequisites: ["keyGen", "executorAddress", "RPC URL"],
1062
- followUp: ["Sign messageToSign", "POST /multiSignRequest"],
1063
1346
  handler: { importPath: "protocols/evm/lido", exportName: "buildEvmMultisignBodyLidoRequestWithdrawals" },
1064
1347
  inputZod: mcpLidoRequestWithdrawalsInputSchema
1065
1348
  }),
@@ -1070,7 +1353,6 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
1070
1353
  chainCategory: "evm",
1071
1354
  description: "Build tx for Lido claimWithdrawal.",
1072
1355
  prerequisites: ["keyGen", "executorAddress", "RPC URL"],
1073
- followUp: ["Sign messageToSign", "POST /multiSignRequest"],
1074
1356
  handler: { importPath: "protocols/evm/lido", exportName: "buildEvmMultisignBodyLidoClaimWithdrawal" },
1075
1357
  inputZod: mcpLidoClaimWithdrawalInputSchema
1076
1358
  }),
@@ -1081,7 +1363,6 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
1081
1363
  chainCategory: "evm",
1082
1364
  description: "Build batch for wstETH wrap.",
1083
1365
  prerequisites: ["keyGen", "executorAddress", "RPC URL"],
1084
- followUp: ["Sign messageToSign", "POST /multiSignRequest"],
1085
1366
  handler: { importPath: "protocols/evm/lido", exportName: "buildEvmMultisignBodyLidoWrapStEth" },
1086
1367
  inputZod: mcpLidoWrapStEthInputSchema
1087
1368
  }),
@@ -1092,7 +1373,6 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
1092
1373
  chainCategory: "evm",
1093
1374
  description: "Build tx for wstETH unwrap.",
1094
1375
  prerequisites: ["keyGen", "executorAddress", "RPC URL"],
1095
- followUp: ["Sign messageToSign", "POST /multiSignRequest"],
1096
1376
  handler: { importPath: "protocols/evm/lido", exportName: "buildEvmMultisignBodyLidoUnwrapWstEth" },
1097
1377
  inputZod: mcpLidoUnwrapWstEthInputSchema
1098
1378
  }),
@@ -1103,7 +1383,6 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
1103
1383
  chainCategory: "evm",
1104
1384
  description: "Build batch: USDe approve + sUSDe deposit.",
1105
1385
  prerequisites: ["keyGen", "executorAddress", "Ethereum mainnet RPC"],
1106
- followUp: ["Sign messageToSign", "POST /multiSignRequest"],
1107
1386
  handler: { importPath: "protocols/evm/ethena", exportName: "buildEvmMultisignBodyEthenaUsdeStakeToSusde" },
1108
1387
  inputZod: mcpEthenaStakeInputSchema
1109
1388
  }),
@@ -1114,7 +1393,6 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
1114
1393
  chainCategory: "evm",
1115
1394
  description: "Build sUSDe redeem when cooldown is off.",
1116
1395
  prerequisites: ["keyGen", "executorAddress", "RPC URL"],
1117
- followUp: ["Sign messageToSign", "POST /multiSignRequest"],
1118
1396
  handler: { importPath: "protocols/evm/ethena", exportName: "buildEvmMultisignBodyEthenaSusdeRedeemToUsde" },
1119
1397
  inputZod: mcpEthenaRedeemInputSchema
1120
1398
  }),
@@ -1125,7 +1403,6 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
1125
1403
  chainCategory: "evm",
1126
1404
  description: "Build sUSDe cooldownShares batch step.",
1127
1405
  prerequisites: ["keyGen", "executorAddress", "RPC URL"],
1128
- followUp: ["Sign messageToSign", "POST /multiSignRequest"],
1129
1406
  handler: { importPath: "protocols/evm/ethena", exportName: "buildEvmMultisignBodyEthenaSusdeCooldownShares" },
1130
1407
  inputZod: mcpEthenaCooldownInputSchema
1131
1408
  }),
@@ -1136,7 +1413,6 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
1136
1413
  chainCategory: "evm",
1137
1414
  description: "Build unstake claim after cooldown.",
1138
1415
  prerequisites: ["keyGen", "executorAddress", "RPC URL"],
1139
- followUp: ["Sign messageToSign", "POST /multiSignRequest"],
1140
1416
  handler: { importPath: "protocols/evm/ethena", exportName: "buildEvmMultisignBodyEthenaUnstakeClaim" },
1141
1417
  inputZod: mcpEthenaClaimInputSchema
1142
1418
  }),
@@ -1147,7 +1423,6 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
1147
1423
  chainCategory: "evm",
1148
1424
  description: "Build Maple Syrup router deposit batch.",
1149
1425
  prerequisites: ["keyGen", "executorAddress", "router + pool addresses"],
1150
- followUp: ["Sign messageToSign", "POST /multiSignRequest"],
1151
1426
  handler: { importPath: "protocols/evm/maple", exportName: "buildEvmMultisignBodyMapleSyrupDeposit" },
1152
1427
  inputZod: mcpMapleDepositInputSchema
1153
1428
  }),
@@ -1158,7 +1433,6 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
1158
1433
  chainCategory: "evm",
1159
1434
  description: "Build Maple PoolV2 requestRedeem batch.",
1160
1435
  prerequisites: ["keyGen", "executorAddress", "pool address"],
1161
- followUp: ["Sign messageToSign", "POST /multiSignRequest"],
1162
1436
  handler: { importPath: "protocols/evm/maple", exportName: "buildEvmMultisignBodyMaplePoolRequestRedeem" },
1163
1437
  inputZod: mcpMapleRequestRedeemInputSchema
1164
1438
  }),
@@ -1169,7 +1443,6 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
1169
1443
  chainCategory: "evm",
1170
1444
  description: "Build Sky Lockstake open/stake batch.",
1171
1445
  prerequisites: ["keyGen", "executorAddress", "Ethereum mainnet RPC"],
1172
- followUp: ["Sign messageToSign", "POST /multiSignRequest"],
1173
1446
  handler: { importPath: "protocols/evm/sky", exportName: "buildSkyLockstakeStakePositionBatch" },
1174
1447
  inputZod: mcpSkyLockstakeStakeInputSchema
1175
1448
  }),
@@ -1180,7 +1453,6 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
1180
1453
  chainCategory: "evm",
1181
1454
  description: "Build Lockstake draw (borrow USDS).",
1182
1455
  prerequisites: ["keyGen", "executorAddress", "open urn"],
1183
- followUp: ["Sign messageToSign", "POST /multiSignRequest"],
1184
1456
  handler: { importPath: "protocols/evm/sky", exportName: "buildSkyLockstakeDrawBatch" },
1185
1457
  inputZod: mcpSkyLockstakeDrawInputSchema
1186
1458
  }),
@@ -1191,7 +1463,6 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
1191
1463
  chainCategory: "evm",
1192
1464
  description: "Build Lockstake repay/wipe batch.",
1193
1465
  prerequisites: ["keyGen", "executorAddress", "urn index"],
1194
- followUp: ["Sign messageToSign", "POST /multiSignRequest"],
1195
1466
  handler: { importPath: "protocols/evm/sky", exportName: "buildSkyLockstakeWipeBatch" },
1196
1467
  inputZod: mcpSkyLockstakeWipeInputSchema
1197
1468
  }),
@@ -1202,7 +1473,6 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
1202
1473
  chainCategory: "evm",
1203
1474
  description: "Build Lockstake close position batch.",
1204
1475
  prerequisites: ["keyGen", "executorAddress", "urn index"],
1205
- followUp: ["Sign messageToSign", "POST /multiSignRequest"],
1206
1476
  handler: { importPath: "protocols/evm/sky", exportName: "buildSkyLockstakeCloseBatch" },
1207
1477
  inputZod: mcpSkyLockstakeCloseInputSchema
1208
1478
  }),
@@ -1213,7 +1483,6 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
1213
1483
  chainCategory: "evm",
1214
1484
  description: "Build Lockstake getReward batch.",
1215
1485
  prerequisites: ["keyGen", "executorAddress", "urn index"],
1216
- followUp: ["Sign messageToSign", "POST /multiSignRequest"],
1217
1486
  handler: { importPath: "protocols/evm/sky", exportName: "buildSkyLockstakeGetRewardBatch" },
1218
1487
  inputZod: mcpSkyLockstakeGetRewardInputSchema
1219
1488
  }),
@@ -1224,7 +1493,6 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
1224
1493
  chainCategory: "evm",
1225
1494
  description: "Build USDS \u2192 sUSDS ERC-4626 deposit batch.",
1226
1495
  prerequisites: ["keyGen", "executorAddress", "RPC URL"],
1227
- followUp: ["Sign messageToSign", "POST /multiSignRequest"],
1228
1496
  handler: { importPath: "protocols/evm/sky", exportName: "buildSkySusdsDepositFromUsdsBatch" },
1229
1497
  inputZod: mcpSkySusdsDepositInputSchema
1230
1498
  }),
@@ -1235,7 +1503,6 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
1235
1503
  chainCategory: "evm",
1236
1504
  description: "Build sUSDS redeem to USDS batch.",
1237
1505
  prerequisites: ["keyGen", "executorAddress", "RPC URL"],
1238
- followUp: ["Sign messageToSign", "POST /multiSignRequest"],
1239
1506
  handler: { importPath: "protocols/evm/sky", exportName: "buildSkySusdsRedeemToUsdsBatch" },
1240
1507
  inputZod: mcpSkySusdsRedeemInputSchema
1241
1508
  }),
@@ -1246,7 +1513,6 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
1246
1513
  chainCategory: "evm",
1247
1514
  description: "Build Aave v4 Spoke supply/deposit batch (wrap native, approve, supply).",
1248
1515
  prerequisites: ["keyGenId", "chainId", "underlying", "amountHuman", "get_defi_protocol_skill for hubs/spokes"],
1249
- followUp: ["Sign messageToSign", "POST /multiSignRequest"],
1250
1516
  handler: { importPath: "protocols/evm/aave-v4", exportName: "buildEvmMultisignBodyAaveV4DepositBatch" },
1251
1517
  inputZod: mcpAaveV4DepositInputSchema
1252
1518
  }),
@@ -1257,7 +1523,6 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
1257
1523
  chainCategory: "evm",
1258
1524
  description: "Build Aave v4 Spoke withdraw; health-factor preview when user has borrow debt.",
1259
1525
  prerequisites: ["keyGenId", "chainId", "underlying (supplied asset)", "amountHuman"],
1260
- followUp: ["Sign messageToSign", "POST /multiSignRequest"],
1261
1526
  handler: { importPath: "protocols/evm/aave-v4", exportName: "buildEvmMultisignBodyAaveV4SpokeWithdraw" },
1262
1527
  inputZod: mcpAaveV4WithdrawInputSchema
1263
1528
  }),
@@ -1274,7 +1539,6 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
1274
1539
  "amountHuman",
1275
1540
  "collateral supplied via deposit"
1276
1541
  ],
1277
- followUp: ["Sign messageToSign", "POST /multiSignRequest"],
1278
1542
  handler: { importPath: "protocols/evm/aave-v4", exportName: "buildEvmMultisignBodyAaveV4SpokeBorrow" },
1279
1543
  inputZod: mcpAaveV4BorrowInputSchema
1280
1544
  }),
@@ -1285,7 +1549,6 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
1285
1549
  chainCategory: "evm",
1286
1550
  description: "Build Aave v4 Spoke repay (approve if needed + repay).",
1287
1551
  prerequisites: ["keyGenId", "chainId", "underlying (debt token)", "amountHuman"],
1288
- followUp: ["Sign messageToSign", "POST /multiSignRequest"],
1289
1552
  handler: { importPath: "protocols/evm/aave-v4", exportName: "buildEvmMultisignBodyAaveV4SpokeRepay" },
1290
1553
  inputZod: mcpAaveV4RepayInputSchema
1291
1554
  }),
@@ -1296,7 +1559,6 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
1296
1559
  chainCategory: "evm",
1297
1560
  description: "Build Euler v2 vault deposit/lend batch.",
1298
1561
  prerequisites: ["keyGen", "executorAddress", "vault address"],
1299
- followUp: ["Sign messageToSign", "POST /multiSignRequest"],
1300
1562
  handler: { importPath: "protocols/evm/euler-v2", exportName: "buildEvmMultisignBodyEulerV2IsolatedLendDepositBatch" },
1301
1563
  inputZod: mcpEulerV2IsolatedLendInputSchema
1302
1564
  }),
@@ -1307,7 +1569,6 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
1307
1569
  chainCategory: "evm",
1308
1570
  description: "Build Euler v2 isolated borrow loop batch.",
1309
1571
  prerequisites: ["keyGen", "executorAddress", "vault + collateral"],
1310
- followUp: ["Sign messageToSign", "POST /multiSignRequest"],
1311
1572
  handler: { importPath: "protocols/evm/euler-v2", exportName: "buildEvmMultisignBodyEulerV2IsolatedBorrowBatch" },
1312
1573
  inputZod: mcpEulerV2IsolatedBorrowInputSchema
1313
1574
  }),
@@ -1318,7 +1579,6 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
1318
1579
  chainCategory: "evm",
1319
1580
  description: "Build Euler v2 vault withdraw/redeem batch.",
1320
1581
  prerequisites: ["keyGen", "executorAddress", "vault address"],
1321
- followUp: ["Sign messageToSign", "POST /multiSignRequest"],
1322
1582
  handler: { importPath: "protocols/evm/euler-v2", exportName: "buildEvmMultisignBodyEulerV2VaultWithdraw" },
1323
1583
  inputZod: mcpEulerV2VaultWithdrawInputSchema
1324
1584
  }),
@@ -1329,7 +1589,6 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
1329
1589
  chainCategory: "evm",
1330
1590
  description: "Build Euler v2 borrow repay batch.",
1331
1591
  prerequisites: ["keyGen", "executorAddress", "vault address"],
1332
- followUp: ["Sign messageToSign", "POST /multiSignRequest"],
1333
1592
  handler: { importPath: "protocols/evm/euler-v2", exportName: "buildEvmMultisignBodyEulerV2BorrowRepayBatch" },
1334
1593
  inputZod: mcpEulerV2BorrowRepayInputSchema
1335
1594
  }),
@@ -1340,7 +1599,6 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
1340
1599
  chainCategory: "evm",
1341
1600
  description: "Build Euler v2 borrow collateral deposit batch.",
1342
1601
  prerequisites: ["keyGen", "executorAddress", "vault + collateral asset"],
1343
- followUp: ["Sign messageToSign", "POST /multiSignRequest"],
1344
1602
  handler: { importPath: "protocols/evm/euler-v2", exportName: "buildEvmMultisignBodyEulerV2BorrowCollateralDepositBatch" },
1345
1603
  inputZod: mcpEulerV2CollateralDepositInputSchema
1346
1604
  }),
@@ -1351,7 +1609,6 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
1351
1609
  chainCategory: "evm",
1352
1610
  description: "Build Euler v2 borrow collateral withdraw batch.",
1353
1611
  prerequisites: ["keyGen", "executorAddress", "vault + collateral asset"],
1354
- followUp: ["Sign messageToSign", "POST /multiSignRequest"],
1355
1612
  handler: { importPath: "protocols/evm/euler-v2", exportName: "buildEvmMultisignBodyEulerV2BorrowCollateralWithdrawBatch" },
1356
1613
  inputZod: mcpEulerV2CollateralWithdrawInputSchema
1357
1614
  }),
@@ -1360,9 +1617,8 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
1360
1617
  actionId: "gmx.increase",
1361
1618
  protocolId: "gmx",
1362
1619
  chainCategory: "evm",
1363
- description: "Build mpc-auth multiSignRequest for GMX classic increase order (open/add perp). Keeper executes asynchronously after on-chain broadcast.",
1620
+ description: "Create and submit mpc-auth multiSignRequest for GMX classic increase order (open/add perp). Keeper executes asynchronously after on-chain broadcast.",
1364
1621
  prerequisites: ["keyGen", "executorAddress", "GMX market symbol", "classic mode only \u2014 no subaccounts"],
1365
- followUp: ["Sign messageToSign", "POST /multiSignRequest"],
1366
1622
  handler: { importPath: "protocols/evm/gmx", exportName: "buildEvmMultisignBodyGmxIncreaseBatch" },
1367
1623
  inputZod: mcpGmxIncreaseInputSchema
1368
1624
  }),
@@ -1371,9 +1627,8 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
1371
1627
  actionId: "gmx.decrease",
1372
1628
  protocolId: "gmx",
1373
1629
  chainCategory: "evm",
1374
- description: "Build mpc-auth multiSignRequest for GMX classic decrease order (close/reduce perp).",
1630
+ description: "Create and submit mpc-auth multiSignRequest for GMX classic decrease order (close/reduce perp).",
1375
1631
  prerequisites: ["keyGen", "executorAddress", "position market symbol"],
1376
- followUp: ["Sign messageToSign", "POST /multiSignRequest"],
1377
1632
  handler: { importPath: "protocols/evm/gmx", exportName: "buildEvmMultisignBodyGmxDecreaseBatch" },
1378
1633
  inputZod: mcpGmxDecreaseInputSchema
1379
1634
  }),
@@ -1382,9 +1637,8 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
1382
1637
  actionId: "gmx.cancel",
1383
1638
  protocolId: "gmx",
1384
1639
  chainCategory: "evm",
1385
- description: "Build mpc-auth multiSignRequest to cancel a pending GMX order (classic on-chain).",
1640
+ description: "Create and submit mpc-auth multiSignRequest to cancel a pending GMX order (classic on-chain).",
1386
1641
  prerequisites: ["keyGen", "executorAddress", "orderId from fetchOrders"],
1387
- followUp: ["Sign messageToSign", "POST /multiSignRequest"],
1388
1642
  handler: { importPath: "protocols/evm/gmx", exportName: "buildEvmMultisignBodyGmxCancelBatch" },
1389
1643
  inputZod: mcpGmxCancelInputSchema
1390
1644
  }),
@@ -1393,9 +1647,8 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
1393
1647
  actionId: "gmx.gmDeposit",
1394
1648
  protocolId: "gmx",
1395
1649
  chainCategory: "evm",
1396
- description: "Build mpc-auth multiSignRequest for GMX GM pool deposit (ExchangeRouter multicall). Keeper executes asynchronously.",
1650
+ description: "Create and submit mpc-auth multiSignRequest for GMX GM pool deposit (ExchangeRouter multicall). Keeper executes asynchronously.",
1397
1651
  prerequisites: ["keyGen", "executorAddress", "marketSymbol", "collateral token"],
1398
- followUp: ["Sign messageToSign", "POST /multiSignRequest"],
1399
1652
  handler: { importPath: "protocols/evm/gmx", exportName: "buildEvmMultisignBodyGmxGmDepositBatch" },
1400
1653
  inputZod: mcpGmxGmDepositInputSchema
1401
1654
  }),
@@ -1404,9 +1657,8 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
1404
1657
  actionId: "gmx.gmWithdraw",
1405
1658
  protocolId: "gmx",
1406
1659
  chainCategory: "evm",
1407
- description: "Build mpc-auth multiSignRequest for GMX GM pool withdrawal (ExchangeRouter multicall). Keeper executes asynchronously.",
1660
+ description: "Create and submit mpc-auth multiSignRequest for GMX GM pool withdrawal (ExchangeRouter multicall). Keeper executes asynchronously.",
1408
1661
  prerequisites: ["keyGen", "executorAddress", "GM market token balance"],
1409
- followUp: ["Sign messageToSign", "POST /multiSignRequest"],
1410
1662
  handler: { importPath: "protocols/evm/gmx", exportName: "buildEvmMultisignBodyGmxGmWithdrawBatch" },
1411
1663
  inputZod: mcpGmxGmWithdrawInputSchema
1412
1664
  }),
@@ -1415,9 +1667,8 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
1415
1667
  actionId: "gmx.stakeGmx",
1416
1668
  protocolId: "gmx",
1417
1669
  chainCategory: "evm",
1418
- description: "Build mpc-auth multiSignRequest to stake GMX via RewardRouter.",
1670
+ description: "Create and submit mpc-auth multiSignRequest to stake GMX via RewardRouter.",
1419
1671
  prerequisites: ["keyGen", "executorAddress", "GMX token balance"],
1420
- followUp: ["Sign messageToSign", "POST /multiSignRequest"],
1421
1672
  handler: { importPath: "protocols/evm/gmx", exportName: "buildEvmMultisignBodyGmxStakeGmxBatch" },
1422
1673
  inputZod: mcpGmxStakeGmxInputSchema
1423
1674
  }),
@@ -1426,11 +1677,113 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
1426
1677
  actionId: "gmx.unstakeGmx",
1427
1678
  protocolId: "gmx",
1428
1679
  chainCategory: "evm",
1429
- description: "Build mpc-auth multiSignRequest to unstake GMX via RewardRouter.",
1680
+ description: "Create and submit mpc-auth multiSignRequest to unstake GMX via RewardRouter.",
1430
1681
  prerequisites: ["keyGen", "executorAddress", "staked GMX balance"],
1431
- followUp: ["Sign messageToSign", "POST /multiSignRequest"],
1432
1682
  handler: { importPath: "protocols/evm/gmx", exportName: "buildEvmMultisignBodyGmxUnstakeGmxBatch" },
1433
1683
  inputZod: mcpGmxUnstakeGmxInputSchema
1684
+ }),
1685
+ defineProtocolMcpTool({
1686
+ name: "ctm_hyperliquid_build_limit_order_multisign",
1687
+ actionId: "hyperliquid.limitOrder",
1688
+ protocolId: "hyperliquid",
1689
+ chainCategory: "evm",
1690
+ description: "Create and submit mpc-auth multiSignRequest for a Hyperliquid limit/IoC order via HyperEVM CoreWriter.",
1691
+ prerequisites: ["keyGen", "executorAddress", "chainId 999 or 998", "coin", "limitPxHuman", "szHuman"],
1692
+ handler: { importPath: "protocols/evm/hyperliquid", exportName: "buildEvmMultisignBodyHyperliquidLimitOrderBatch" },
1693
+ inputZod: mcpHyperliquidLimitOrderInputSchema
1694
+ }),
1695
+ defineProtocolMcpTool({
1696
+ name: "ctm_hyperliquid_build_close_multisign",
1697
+ actionId: "hyperliquid.close",
1698
+ protocolId: "hyperliquid",
1699
+ chainCategory: "evm",
1700
+ description: "Create and submit mpc-auth multiSignRequest to close/reduce a perp (IoC reduce-only limit via CoreWriter).",
1701
+ prerequisites: ["keyGen", "executorAddress", "open position from fetch_positions", "isLong matches position"],
1702
+ handler: { importPath: "protocols/evm/hyperliquid", exportName: "buildEvmMultisignBodyHyperliquidCloseBatch" },
1703
+ inputZod: mcpHyperliquidCloseInputSchema
1704
+ }),
1705
+ defineProtocolMcpTool({
1706
+ name: "ctm_hyperliquid_build_cancel_multisign",
1707
+ actionId: "hyperliquid.cancel",
1708
+ protocolId: "hyperliquid",
1709
+ chainCategory: "evm",
1710
+ description: "Create and submit mpc-auth multiSignRequest to cancel a Hyperliquid open order.",
1711
+ prerequisites: ["keyGen", "executorAddress", "oid from fetch_open_orders"],
1712
+ handler: { importPath: "protocols/evm/hyperliquid", exportName: "buildEvmMultisignBodyHyperliquidCancelBatch" },
1713
+ inputZod: mcpHyperliquidCancelInputSchema
1714
+ }),
1715
+ defineProtocolMcpTool({
1716
+ name: "ctm_hyperliquid_build_usd_transfer_multisign",
1717
+ actionId: "hyperliquid.usdTransfer",
1718
+ protocolId: "hyperliquid",
1719
+ chainCategory: "evm",
1720
+ description: "Create and submit mpc-auth multiSignRequest to move USDC between spot and perp margin.",
1721
+ prerequisites: ["keyGen", "executorAddress", "usdHuman", "toPerp boolean"],
1722
+ handler: {
1723
+ importPath: "protocols/evm/hyperliquid",
1724
+ exportName: "buildEvmMultisignBodyHyperliquidUsdClassTransferBatch"
1725
+ },
1726
+ inputZod: mcpHyperliquidUsdTransferInputSchema
1727
+ }),
1728
+ defineProtocolMcpTool({
1729
+ name: "ctm_hyperliquid_build_vault_deposit_multisign",
1730
+ actionId: "hyperliquid.vaultDeposit",
1731
+ protocolId: "hyperliquid",
1732
+ chainCategory: "evm",
1733
+ description: "Create and submit mpc-auth multiSignRequest for Hyperliquid vault deposit.",
1734
+ prerequisites: ["keyGen", "executorAddress", "vaultAddress from fetch_vaults"],
1735
+ handler: { importPath: "protocols/evm/hyperliquid", exportName: "buildEvmMultisignBodyHyperliquidVaultDepositBatch" },
1736
+ inputZod: mcpHyperliquidVaultDepositInputSchema
1737
+ }),
1738
+ defineProtocolMcpTool({
1739
+ name: "ctm_hyperliquid_build_vault_withdraw_multisign",
1740
+ actionId: "hyperliquid.vaultWithdraw",
1741
+ protocolId: "hyperliquid",
1742
+ chainCategory: "evm",
1743
+ description: "Create and submit mpc-auth multiSignRequest for Hyperliquid vault withdraw (includes accrued PnL).",
1744
+ prerequisites: ["keyGen", "executorAddress", "vaultAddress", "equity from fetch_user_vault_equities"],
1745
+ handler: { importPath: "protocols/evm/hyperliquid", exportName: "buildEvmMultisignBodyHyperliquidVaultWithdrawBatch" },
1746
+ inputZod: mcpHyperliquidVaultWithdrawInputSchema
1747
+ }),
1748
+ defineProtocolMcpTool({
1749
+ name: "ctm_hyperliquid_build_stake_multisign",
1750
+ actionId: "hyperliquid.stake",
1751
+ protocolId: "hyperliquid",
1752
+ chainCategory: "evm",
1753
+ description: "Create and submit mpc-auth multiSignRequest to stake HYPE via CoreWriter.",
1754
+ prerequisites: ["keyGen", "executorAddress", "HYPE balance on Hyperliquid account"],
1755
+ handler: { importPath: "protocols/evm/hyperliquid", exportName: "buildEvmMultisignBodyHyperliquidStakeDepositBatch" },
1756
+ inputZod: mcpHyperliquidStakeInputSchema
1757
+ }),
1758
+ defineProtocolMcpTool({
1759
+ name: "ctm_hyperliquid_build_unstake_multisign",
1760
+ actionId: "hyperliquid.unstake",
1761
+ protocolId: "hyperliquid",
1762
+ chainCategory: "evm",
1763
+ description: "Create and submit mpc-auth multiSignRequest to unstake HYPE via CoreWriter.",
1764
+ prerequisites: ["keyGen", "executorAddress", "staked HYPE"],
1765
+ handler: { importPath: "protocols/evm/hyperliquid", exportName: "buildEvmMultisignBodyHyperliquidStakeWithdrawBatch" },
1766
+ inputZod: mcpHyperliquidUnstakeInputSchema
1767
+ }),
1768
+ defineProtocolMcpTool({
1769
+ name: "ctm_hyperliquid_build_delegate_multisign",
1770
+ actionId: "hyperliquid.delegate",
1771
+ protocolId: "hyperliquid",
1772
+ chainCategory: "evm",
1773
+ description: "Create and submit mpc-auth multiSignRequest to delegate staked HYPE to a validator.",
1774
+ prerequisites: ["keyGen", "executorAddress", "validator address", "hypeHuman"],
1775
+ handler: { importPath: "protocols/evm/hyperliquid", exportName: "buildEvmMultisignBodyHyperliquidDelegateOnlyBatch" },
1776
+ inputZod: mcpHyperliquidDelegateInputSchema
1777
+ }),
1778
+ defineProtocolMcpTool({
1779
+ name: "ctm_hyperliquid_build_undelegate_multisign",
1780
+ actionId: "hyperliquid.undelegate",
1781
+ protocolId: "hyperliquid",
1782
+ chainCategory: "evm",
1783
+ description: "Create and submit mpc-auth multiSignRequest to undelegate HYPE from a validator.",
1784
+ prerequisites: ["keyGen", "executorAddress", "delegation from fetch_delegations"],
1785
+ handler: { importPath: "protocols/evm/hyperliquid", exportName: "buildEvmMultisignBodyHyperliquidUndelegateBatch" },
1786
+ inputZod: mcpHyperliquidUndelegateInputSchema
1434
1787
  })
1435
1788
  ];
1436
1789
 
@@ -1444,6 +1797,15 @@ function defineMcpTool(def) {
1444
1797
  parseOutput: (data) => def.outputZod.parse(data)
1445
1798
  };
1446
1799
  }
1800
+ function defineMultisignSubmitMcpTool(def) {
1801
+ const meta = withMultisignSubmitMcpMeta(def.description, def.followUp ?? MCP_MULTISIGN_SUBMIT_FOLLOW_UP);
1802
+ return defineMcpTool({
1803
+ ...def,
1804
+ description: meta.description,
1805
+ followUp: meta.followUp,
1806
+ outputZod: mcpServerSubmitOutputSchema
1807
+ });
1808
+ }
1447
1809
  var CORE_MCP_TOOL_DEFINITIONS = [
1448
1810
  defineMcpTool({
1449
1811
  name: "ctm_uniswap_v4_quote",
@@ -1476,20 +1838,18 @@ var CORE_MCP_TOOL_DEFINITIONS = [
1476
1838
  inputZod: mcpUniswapV4CreateSwapInputSchema,
1477
1839
  outputZod: mcpUniswapV4CreateSwapOutputSchema
1478
1840
  }),
1479
- defineMcpTool({
1841
+ defineMultisignSubmitMcpTool({
1480
1842
  name: "ctm_uniswap_v4_build_swap_multisign",
1481
1843
  actionId: "uniswap-v4.swap-exact-input",
1482
1844
  protocolId: "uniswap-v4",
1483
1845
  chainCategory: "evm",
1484
- description: "Build mpc-auth multiSignRequest body for a Uniswap V4 swap. May batch 1\u20133 EVM txs: ERC-20 approve(s) to Permit2/router path + Universal Router swap (or 1 tx for native-in). Estimates gas, serializes unsigned txs, sets proposalTxParams. Output must be signed and POSTed to /multiSignRequest by the caller.",
1846
+ description: "Create and submit mpc-auth multiSignRequest for a Uniswap V4 swap. May batch 1\u20133 EVM txs: ERC-20 approve(s) + Universal Router swap (or 1 tx for native-in).",
1485
1847
  prerequisites: [
1486
1848
  "ctm_uniswap_v4_create_swap output + matching quote snapshot and swapDeadlineUnix",
1487
1849
  "keyGenId + chainId + purposeText"
1488
1850
  ],
1489
- followUp: ["Sign messageToSign", "POST /multiSignRequest with clientSig and signedMessage"],
1490
1851
  handler: { importPath: "protocols/evm/uniswap-v4", exportName: "buildEvmMultisignBodyUniswapV4SkipPermit2Batch" },
1491
- inputZod: mcpUniswapV4BuildSwapMultisignInputSchema,
1492
- outputZod: multisignOutputSchema
1852
+ inputZod: mcpUniswapV4BuildSwapMultisignInputSchema
1493
1853
  }),
1494
1854
  defineMcpTool({
1495
1855
  name: "ctm_uniswap_v4_list_lp_pools",
@@ -1519,24 +1879,22 @@ var CORE_MCP_TOOL_DEFINITIONS = [
1519
1879
  inputZod: mcpUniswapV4LpCreatePositionInputSchema,
1520
1880
  outputZod: mcpUniswapV4LpCreatePositionOutputSchema
1521
1881
  }),
1522
- defineMcpTool({
1882
+ defineMultisignSubmitMcpTool({
1523
1883
  name: "ctm_uniswap_v4_build_mint_liquidity_multisign",
1524
1884
  actionId: "uniswap-v4.mint-liquidity",
1525
1885
  protocolId: "uniswap-v4",
1526
1886
  chainCategory: "evm",
1527
- description: "Build mpc-auth multiSignRequest for minting a Uniswap V4 LP position. Batches ERC-20 approve(s) + Position Manager tx from LP create response.",
1887
+ description: "Create and submit mpc-auth multiSignRequest for minting a Uniswap V4 LP position. Batches ERC-20 approve(s) + Position Manager tx from LP create response.",
1528
1888
  prerequisites: ["ctm_uniswap_v4_lp_create_position output", "keyGenId + chainId + purposeText"],
1529
1889
  followUp: [
1530
- "Sign messageToSign",
1531
- "POST /multiSignRequest",
1532
- "After execute: ctm_uniswap_v4_register_position_from_mint_tx (mint tx hash)"
1890
+ ...MCP_MULTISIGN_SUBMIT_FOLLOW_UP,
1891
+ "After broadcast: ctm_uniswap_v4_register_position_from_mint_tx (mint tx hash)"
1533
1892
  ],
1534
1893
  handler: {
1535
1894
  importPath: "protocols/evm/uniswap-v4",
1536
1895
  exportName: "buildEvmMultisignBodyUniswapV4MintLiquidityBatch"
1537
1896
  },
1538
- inputZod: mcpUniswapV4BuildMintLiquidityMultisignInputSchema,
1539
- outputZod: multisignOutputSchema
1897
+ inputZod: mcpUniswapV4BuildMintLiquidityMultisignInputSchema
1540
1898
  }),
1541
1899
  defineMcpTool({
1542
1900
  name: "ctm_uniswap_v4_lp_increase",
@@ -1550,20 +1908,18 @@ var CORE_MCP_TOOL_DEFINITIONS = [
1550
1908
  inputZod: mcpUniswapV4LpIncreaseInputSchema,
1551
1909
  outputZod: mcpUniswapV4LpIncreaseOutputSchema
1552
1910
  }),
1553
- defineMcpTool({
1911
+ defineMultisignSubmitMcpTool({
1554
1912
  name: "ctm_uniswap_v4_build_increase_liquidity_multisign",
1555
1913
  actionId: "uniswap-v4.increase-liquidity",
1556
1914
  protocolId: "uniswap-v4",
1557
1915
  chainCategory: "evm",
1558
- description: "Build mpc-auth multiSignRequest to increase Uniswap V4 position liquidity.",
1916
+ description: "Create and submit mpc-auth multiSignRequest to increase Uniswap V4 position liquidity.",
1559
1917
  prerequisites: ["ctm_uniswap_v4_lp_increase output"],
1560
- followUp: ["Sign messageToSign", "POST /multiSignRequest"],
1561
1918
  handler: {
1562
1919
  importPath: "protocols/evm/uniswap-v4",
1563
1920
  exportName: "buildEvmMultisignBodyUniswapV4IncreaseLiquidityBatch"
1564
1921
  },
1565
- inputZod: mcpUniswapV4BuildIncreaseLiquidityMultisignInputSchema,
1566
- outputZod: multisignOutputSchema
1922
+ inputZod: mcpUniswapV4BuildIncreaseLiquidityMultisignInputSchema
1567
1923
  }),
1568
1924
  defineMcpTool({
1569
1925
  name: "ctm_uniswap_v4_lp_decrease",
@@ -1577,20 +1933,18 @@ var CORE_MCP_TOOL_DEFINITIONS = [
1577
1933
  inputZod: mcpUniswapV4LpDecreaseInputSchema,
1578
1934
  outputZod: mcpUniswapV4LpDecreaseOutputSchema
1579
1935
  }),
1580
- defineMcpTool({
1936
+ defineMultisignSubmitMcpTool({
1581
1937
  name: "ctm_uniswap_v4_build_decrease_liquidity_multisign",
1582
1938
  actionId: "uniswap-v4.decrease-liquidity",
1583
1939
  protocolId: "uniswap-v4",
1584
1940
  chainCategory: "evm",
1585
- description: "Build mpc-auth multiSignRequest to decrease Uniswap V4 position liquidity.",
1941
+ description: "Create and submit mpc-auth multiSignRequest to decrease Uniswap V4 position liquidity.",
1586
1942
  prerequisites: ["ctm_uniswap_v4_lp_decrease output"],
1587
- followUp: ["Sign messageToSign", "POST /multiSignRequest"],
1588
1943
  handler: {
1589
1944
  importPath: "protocols/evm/uniswap-v4",
1590
1945
  exportName: "buildEvmMultisignBodyUniswapV4DecreaseLiquidityBatch"
1591
1946
  },
1592
- inputZod: mcpUniswapV4BuildDecreaseLiquidityMultisignInputSchema,
1593
- outputZod: multisignOutputSchema
1947
+ inputZod: mcpUniswapV4BuildDecreaseLiquidityMultisignInputSchema
1594
1948
  }),
1595
1949
  defineMcpTool({
1596
1950
  name: "ctm_uniswap_v4_lp_collect",
@@ -1604,20 +1958,18 @@ var CORE_MCP_TOOL_DEFINITIONS = [
1604
1958
  inputZod: mcpUniswapV4LpClaimInputSchema,
1605
1959
  outputZod: mcpUniswapV4LpClaimOutputSchema
1606
1960
  }),
1607
- defineMcpTool({
1961
+ defineMultisignSubmitMcpTool({
1608
1962
  name: "ctm_uniswap_v4_build_collect_fees_multisign",
1609
1963
  actionId: "uniswap-v4.collect-fees",
1610
1964
  protocolId: "uniswap-v4",
1611
1965
  chainCategory: "evm",
1612
- description: "Build mpc-auth multiSignRequest to collect fees from a Uniswap V4 position.",
1966
+ description: "Create and submit mpc-auth multiSignRequest to collect fees from a Uniswap V4 position.",
1613
1967
  prerequisites: ["ctm_uniswap_v4_lp_collect output"],
1614
- followUp: ["Sign messageToSign", "POST /multiSignRequest"],
1615
1968
  handler: {
1616
1969
  importPath: "protocols/evm/uniswap-v4",
1617
1970
  exportName: "buildEvmMultisignBodyUniswapV4CollectFeesBatch"
1618
1971
  },
1619
- inputZod: mcpUniswapV4BuildCollectFeesMultisignInputSchema,
1620
- outputZod: multisignOutputSchema
1972
+ inputZod: mcpUniswapV4BuildCollectFeesMultisignInputSchema
1621
1973
  }),
1622
1974
  defineMcpTool({
1623
1975
  name: "ctm_uniswap_v4_lp_list_positions",
@@ -1680,21 +2032,19 @@ var CORE_MCP_TOOL_DEFINITIONS = [
1680
2032
  inputZod: mcpCurveDaoQuoteInputSchema,
1681
2033
  outputZod: mcpCurveDaoQuoteOutputSchema
1682
2034
  }),
1683
- defineMcpTool({
2035
+ defineMultisignSubmitMcpTool({
1684
2036
  name: "ctm_curve_dao_build_swap_multisign",
1685
2037
  actionId: "curve-dao.swap",
1686
2038
  protocolId: "curve-dao",
1687
2039
  chainCategory: "evm",
1688
- description: "Build mpc-auth multiSignRequest for a Curve Router NG swap via @curvefi/api populateSwap. Optionally batches ERC-20 approve txs when allowance is insufficient, then exchange. Requires JSON-RPC and Curve-supported chain.",
2040
+ description: "Create and submit mpc-auth multiSignRequest for a Curve Router NG swap via @curvefi/api populateSwap. Optionally batches ERC-20 approve txs when allowance is insufficient, then exchange.",
1689
2041
  prerequisites: [
1690
2042
  "ctm_curve_dao_quote (recommended)",
1691
2043
  "keyGenId + chainId + purposeText + slippagePercent (0\u2013100 exclusive)",
1692
2044
  "get_defi_protocol_skill for tokenIn address rules"
1693
2045
  ],
1694
- followUp: ["Sign messageToSign", "POST /multiSignRequest with clientSig and signedMessage"],
1695
2046
  handler: { importPath: "protocols/evm/curve-dao", exportName: "buildEvmMultisignBodyCurveDaoBatch" },
1696
- inputZod: mcpCurveDaoBuildSwapMultisignInputSchema,
1697
- outputZod: multisignOutputSchema
2047
+ inputZod: mcpCurveDaoBuildSwapMultisignInputSchema
1698
2048
  }),
1699
2049
  defineMcpTool({
1700
2050
  name: "ctm_gmx_fetch_markets",
@@ -1779,6 +2129,126 @@ var CORE_MCP_TOOL_DEFINITIONS = [
1779
2129
  handler: { importPath: "protocols/evm/gmx", exportName: "gmxFetchStakingPower" },
1780
2130
  inputZod: mcpGmxFetchStakingPowerInputSchema,
1781
2131
  outputZod: mcpGmxFetchStakingPowerOutputSchema
2132
+ }),
2133
+ defineMcpTool({
2134
+ name: "ctm_hyperliquid_fetch_markets",
2135
+ actionId: "hyperliquid.fetch-markets",
2136
+ protocolId: "hyperliquid",
2137
+ chainCategory: "evm",
2138
+ description: "List Hyperliquid perp markets (coin, maxLeverage, szDecimals) and HIP-3 dex names. chainId 999 mainnet or 998 testnet.",
2139
+ prerequisites: ["chainId 999 or 998"],
2140
+ followUp: ["ctm_hyperliquid_fetch_open_context", "ctm_hyperliquid_build_limit_order_multisign"],
2141
+ handler: { importPath: "protocols/evm/hyperliquid", exportName: "hyperliquidFetchMarketsSummary" },
2142
+ inputZod: mcpHyperliquidFetchMarketsInputSchema,
2143
+ outputZod: mcpHyperliquidFetchMarketsOutputSchema
2144
+ }),
2145
+ defineMcpTool({
2146
+ name: "ctm_hyperliquid_fetch_open_context",
2147
+ actionId: "hyperliquid.fetch-open-context",
2148
+ protocolId: "hyperliquid",
2149
+ chainCategory: "evm",
2150
+ description: "Per-market trading context: account value, withdrawable, margin used, leverage setting, mark price, available buy/sell size.",
2151
+ prerequisites: ["chainId", "executorAddress", "coin from fetch_markets"],
2152
+ followUp: ["ctm_hyperliquid_build_limit_order_multisign"],
2153
+ handler: { importPath: "protocols/evm/hyperliquid", exportName: "hyperliquidFetchOpenContextSummary" },
2154
+ inputZod: mcpHyperliquidFetchOpenContextInputSchema,
2155
+ outputZod: mcpHyperliquidFetchOpenContextOutputSchema
2156
+ }),
2157
+ defineMcpTool({
2158
+ name: "ctm_hyperliquid_fetch_positions",
2159
+ actionId: "hyperliquid.fetch-positions",
2160
+ protocolId: "hyperliquid",
2161
+ chainCategory: "evm",
2162
+ description: "Open Hyperliquid perp positions for executor (size, entry, uPnL, liq price, leverage, margin).",
2163
+ prerequisites: ["chainId", "executorAddress"],
2164
+ followUp: ["ctm_hyperliquid_build_close_multisign"],
2165
+ handler: { importPath: "protocols/evm/hyperliquid", exportName: "hyperliquidFetchPositionsForExecutor" },
2166
+ inputZod: mcpHyperliquidFetchPositionsInputSchema,
2167
+ outputZod: mcpHyperliquidFetchPositionsOutputSchema
2168
+ }),
2169
+ defineMcpTool({
2170
+ name: "ctm_hyperliquid_fetch_open_orders",
2171
+ actionId: "hyperliquid.fetch-open-orders",
2172
+ protocolId: "hyperliquid",
2173
+ chainCategory: "evm",
2174
+ description: "Pending Hyperliquid open orders for executor (oid, coin, side, price, size).",
2175
+ prerequisites: ["chainId", "executorAddress"],
2176
+ followUp: ["ctm_hyperliquid_build_cancel_multisign"],
2177
+ handler: { importPath: "protocols/evm/hyperliquid", exportName: "hyperliquidFetchOpenOrdersSummary" },
2178
+ inputZod: mcpHyperliquidFetchOpenOrdersInputSchema,
2179
+ outputZod: mcpHyperliquidFetchOpenOrdersOutputSchema
2180
+ }),
2181
+ defineMcpTool({
2182
+ name: "ctm_hyperliquid_fetch_market_snapshot",
2183
+ actionId: "hyperliquid.fetch-market-snapshot",
2184
+ protocolId: "hyperliquid",
2185
+ chainCategory: "evm",
2186
+ description: "Mid price and OHLCV candles for a Hyperliquid perp coin. Default interval 15m.",
2187
+ prerequisites: ["chainId", "coin"],
2188
+ followUp: ["ctm_hyperliquid_fetch_open_context", "ctm_hyperliquid_build_limit_order_multisign"],
2189
+ handler: { importPath: "protocols/evm/hyperliquid", exportName: "hyperliquidFetchMarketSnapshotSummary" },
2190
+ inputZod: mcpHyperliquidFetchMarketSnapshotInputSchema,
2191
+ outputZod: mcpHyperliquidFetchMarketSnapshotOutputSchema
2192
+ }),
2193
+ defineMcpTool({
2194
+ name: "ctm_hyperliquid_fetch_usd_class_balances",
2195
+ actionId: "hyperliquid.fetch-usd-balances",
2196
+ protocolId: "hyperliquid",
2197
+ chainCategory: "evm",
2198
+ description: "Spot USDC available and perp withdrawable USD for spot\u2194perp transfers.",
2199
+ prerequisites: ["chainId", "executorAddress"],
2200
+ followUp: ["ctm_hyperliquid_build_usd_transfer_multisign"],
2201
+ handler: { importPath: "protocols/evm/hyperliquid", exportName: "hyperliquidFetchUsdClassBalancesSummary" },
2202
+ inputZod: mcpHyperliquidFetchUsdClassBalancesInputSchema,
2203
+ outputZod: mcpHyperliquidFetchUsdClassBalancesOutputSchema
2204
+ }),
2205
+ defineMcpTool({
2206
+ name: "ctm_hyperliquid_fetch_vaults",
2207
+ actionId: "hyperliquid.fetch-vaults",
2208
+ protocolId: "hyperliquid",
2209
+ chainCategory: "evm",
2210
+ description: "Vault catalog by TVL with APR (mainnet only; may take ~10\u201315s). Pass executorAddress to merge user-held vaults.",
2211
+ prerequisites: ["chainId 999 for catalog"],
2212
+ followUp: ["ctm_hyperliquid_build_vault_deposit_multisign"],
2213
+ handler: { importPath: "protocols/evm/hyperliquid", exportName: "hyperliquidFetchVaultCatalogSummary" },
2214
+ inputZod: mcpHyperliquidFetchVaultsInputSchema,
2215
+ outputZod: mcpHyperliquidFetchVaultsOutputSchema
2216
+ }),
2217
+ defineMcpTool({
2218
+ name: "ctm_hyperliquid_fetch_user_vault_equities",
2219
+ actionId: "hyperliquid.fetch-user-vault-equities",
2220
+ protocolId: "hyperliquid",
2221
+ chainCategory: "evm",
2222
+ description: "USD equity the user holds in Hyperliquid vaults.",
2223
+ prerequisites: ["chainId", "executorAddress"],
2224
+ followUp: ["ctm_hyperliquid_build_vault_withdraw_multisign"],
2225
+ handler: { importPath: "protocols/evm/hyperliquid", exportName: "hyperliquidFetchUserVaultEquitiesSummary" },
2226
+ inputZod: mcpHyperliquidFetchUserVaultEquitiesInputSchema,
2227
+ outputZod: mcpHyperliquidFetchUserVaultEquitiesOutputSchema
2228
+ }),
2229
+ defineMcpTool({
2230
+ name: "ctm_hyperliquid_fetch_staking_summary",
2231
+ actionId: "hyperliquid.fetch-staking-summary",
2232
+ protocolId: "hyperliquid",
2233
+ chainCategory: "evm",
2234
+ description: "HYPE staking summary: delegated and undelegated amounts.",
2235
+ prerequisites: ["chainId", "executorAddress"],
2236
+ followUp: ["ctm_hyperliquid_build_stake_multisign", "ctm_hyperliquid_build_delegate_multisign"],
2237
+ handler: { importPath: "protocols/evm/hyperliquid", exportName: "hyperliquidFetchStakingSummaryForExecutor" },
2238
+ inputZod: mcpHyperliquidFetchStakingSummaryInputSchema,
2239
+ outputZod: mcpHyperliquidFetchStakingSummaryOutputSchema
2240
+ }),
2241
+ defineMcpTool({
2242
+ name: "ctm_hyperliquid_fetch_delegations",
2243
+ actionId: "hyperliquid.fetch-delegations",
2244
+ protocolId: "hyperliquid",
2245
+ chainCategory: "evm",
2246
+ description: "HYPE delegations by validator for executor.",
2247
+ prerequisites: ["chainId", "executorAddress"],
2248
+ followUp: ["ctm_hyperliquid_build_undelegate_multisign"],
2249
+ handler: { importPath: "protocols/evm/hyperliquid", exportName: "hyperliquidFetchDelegationsForExecutor" },
2250
+ inputZod: mcpHyperliquidFetchDelegationsInputSchema,
2251
+ outputZod: mcpHyperliquidFetchDelegationsOutputSchema
1782
2252
  })
1783
2253
  ];
1784
2254
  var MCP_TOOL_DEFINITIONS = [
@@ -1822,6 +2292,7 @@ function getAgentCatalogForMcp() {
1822
2292
  protocols: getProtocolModules(),
1823
2293
  commonParams: EVM_COMMON_PARAM_DOCS,
1824
2294
  multisignOutput: MULTISIGN_OUTPUT_DOC,
2295
+ multisignSubmitOutput: MULTISIGN_SUBMIT_OUTPUT_DOC,
1825
2296
  managementSig: MANAGEMENT_SIG_DOC,
1826
2297
  /** Zod schemas for MCP tool I/O — source of truth for continuum-mcp-server validation. */
1827
2298
  inputSchemas: MCP_TOOL_INPUT_SCHEMAS,
@@ -1830,9 +2301,14 @@ function getAgentCatalogForMcp() {
1830
2301
  evmSwapTypical: [
1831
2302
  "1. Quote (protocol-specific API if needed)",
1832
2303
  "2. Build protocol calldata (e.g. create_swap)",
1833
- "3. build_*_multisign \u2192 { bodyForSign, messageToSign }",
1834
- "4. Sign messageToSign (MetaMask or Ed25519)",
1835
- "5. POST /multiSignRequest with clientSig and signedMessage"
2304
+ "3. build_*_multisign \u2192 { requestId } (MCP auto-submits)",
2305
+ "4. wait_for_sign_request_ready \u2192 sign_request_agree \u2192 trigger_sign_result \u2192 broadcast_sign_result"
2306
+ ],
2307
+ evmSwapManualTypical: [
2308
+ "1. Quote (protocol-specific API if needed)",
2309
+ "2. Build protocol calldata",
2310
+ "3. Protocol builder \u2192 { bodyForSign, messageToSign } (node app only)",
2311
+ "4. Sign messageToSign and POST /multiSignRequest with clientSig and signedMessage"
1836
2312
  ],
1837
2313
  managementPostTypical: [
1838
2314
  "1. GET /getNodeKey \u2192 nodeKey (128 hex)",
@@ -2395,6 +2871,146 @@ var gmxProtocolModule = {
2395
2871
  ]
2396
2872
  };
2397
2873
  registerProtocolModule(gmxProtocolModule);
2874
+
2875
+ // src/protocols/evm/hyperliquid/support.ts
2876
+ var HYPERLIQUID_SUPPORTED_CHAIN_IDS = [999, 998];
2877
+ function isHyperliquidChainSupported(chainId) {
2878
+ return HYPERLIQUID_SUPPORTED_CHAIN_IDS.includes(chainId);
2879
+ }
2880
+
2881
+ // src/protocols/evm/hyperliquid/index.ts
2882
+ var HYPERLIQUID_PROTOCOL_ID = "hyperliquid";
2883
+ var hyperliquidProtocolModule = {
2884
+ id: HYPERLIQUID_PROTOCOL_ID,
2885
+ chainCategory: "evm",
2886
+ isChainSupported(ctx) {
2887
+ if (ctx.chainCategory !== "evm") return false;
2888
+ const chainId = typeof ctx.chainId === "number" ? ctx.chainId : Number(ctx.chainId);
2889
+ return Number.isFinite(chainId) && isHyperliquidChainSupported(chainId);
2890
+ },
2891
+ isTokenSupported(token) {
2892
+ if (token.category !== "evm") return false;
2893
+ return token.kind === "erc20" || token.kind === "native";
2894
+ },
2895
+ actions: [
2896
+ {
2897
+ id: "hyperliquid.limitOrder",
2898
+ protocolId: HYPERLIQUID_PROTOCOL_ID,
2899
+ chainCategory: "evm",
2900
+ description: "Place a Hyperliquid limit/IoC order via HyperEVM CoreWriter",
2901
+ commonParams: ["keyGen", "purposeText", "useCustomGas"],
2902
+ params: {
2903
+ coin: { type: "string", required: true, description: "Market coin e.g. BTC" },
2904
+ isBuy: { type: "boolean", required: true, description: "true for buy/long, false for sell/short" },
2905
+ limitPxHuman: { type: "string", required: true, description: "Limit price" },
2906
+ szHuman: { type: "string", required: true, description: "Order size in coin units" },
2907
+ marketKind: { type: "string", required: false, description: "perp (default) or spot" },
2908
+ tif: { type: "string", required: false, description: "gtc, ioc, or alo" },
2909
+ dex: { type: "string", required: false, description: "HIP-3 dex name when applicable" }
2910
+ }
2911
+ },
2912
+ {
2913
+ id: "hyperliquid.close",
2914
+ protocolId: HYPERLIQUID_PROTOCOL_ID,
2915
+ chainCategory: "evm",
2916
+ description: "Close or reduce a perp via IoC reduce-only limit order (CoreWriter)",
2917
+ commonParams: ["keyGen", "purposeText", "useCustomGas"],
2918
+ params: {
2919
+ coin: { type: "string", required: true, description: "Market coin" },
2920
+ isLong: { type: "boolean", required: true, description: "true if closing a long position" },
2921
+ limitPxHuman: { type: "string", required: true, description: "Limit price" },
2922
+ szHuman: { type: "string", required: true, description: "Size to close in coin units" }
2923
+ }
2924
+ },
2925
+ {
2926
+ id: "hyperliquid.cancel",
2927
+ protocolId: HYPERLIQUID_PROTOCOL_ID,
2928
+ chainCategory: "evm",
2929
+ description: "Cancel a Hyperliquid open order via CoreWriter",
2930
+ commonParams: ["keyGen", "purposeText", "useCustomGas"],
2931
+ params: {
2932
+ coin: { type: "string", required: true, description: "Market coin" },
2933
+ oid: { type: "number", required: true, description: "Order id from openOrders" }
2934
+ }
2935
+ },
2936
+ {
2937
+ id: "hyperliquid.usdTransfer",
2938
+ protocolId: HYPERLIQUID_PROTOCOL_ID,
2939
+ chainCategory: "evm",
2940
+ description: "Move USDC between Hyperliquid spot and perp margin accounts",
2941
+ commonParams: ["keyGen", "purposeText", "useCustomGas"],
2942
+ params: {
2943
+ usdHuman: { type: "string", required: true, description: "USD amount" },
2944
+ toPerp: { type: "boolean", required: true, description: "true spot\u2192perp, false perp\u2192spot" }
2945
+ }
2946
+ },
2947
+ {
2948
+ id: "hyperliquid.vaultDeposit",
2949
+ protocolId: HYPERLIQUID_PROTOCOL_ID,
2950
+ chainCategory: "evm",
2951
+ description: "Deposit USD into a Hyperliquid vault",
2952
+ commonParams: ["keyGen", "purposeText", "useCustomGas"],
2953
+ params: {
2954
+ vaultAddress: { type: "string", required: true, description: "Vault address" },
2955
+ usdHuman: { type: "string", required: true, description: "USD amount" }
2956
+ }
2957
+ },
2958
+ {
2959
+ id: "hyperliquid.vaultWithdraw",
2960
+ protocolId: HYPERLIQUID_PROTOCOL_ID,
2961
+ chainCategory: "evm",
2962
+ description: "Withdraw USD from a Hyperliquid vault (includes accrued PnL)",
2963
+ commonParams: ["keyGen", "purposeText", "useCustomGas"],
2964
+ params: {
2965
+ vaultAddress: { type: "string", required: true, description: "Vault address" },
2966
+ usdHuman: { type: "string", required: true, description: "USD amount" }
2967
+ }
2968
+ },
2969
+ {
2970
+ id: "hyperliquid.stake",
2971
+ protocolId: HYPERLIQUID_PROTOCOL_ID,
2972
+ chainCategory: "evm",
2973
+ description: "Stake HYPE via CoreWriter",
2974
+ commonParams: ["keyGen", "purposeText", "useCustomGas"],
2975
+ params: {
2976
+ hypeHuman: { type: "string", required: true, description: "HYPE amount" }
2977
+ }
2978
+ },
2979
+ {
2980
+ id: "hyperliquid.unstake",
2981
+ protocolId: HYPERLIQUID_PROTOCOL_ID,
2982
+ chainCategory: "evm",
2983
+ description: "Unstake HYPE via CoreWriter",
2984
+ commonParams: ["keyGen", "purposeText", "useCustomGas"],
2985
+ params: {
2986
+ hypeHuman: { type: "string", required: true, description: "HYPE amount" }
2987
+ }
2988
+ },
2989
+ {
2990
+ id: "hyperliquid.delegate",
2991
+ protocolId: HYPERLIQUID_PROTOCOL_ID,
2992
+ chainCategory: "evm",
2993
+ description: "Delegate staked HYPE to a validator",
2994
+ commonParams: ["keyGen", "purposeText", "useCustomGas"],
2995
+ params: {
2996
+ hypeHuman: { type: "string", required: true, description: "HYPE amount" },
2997
+ validator: { type: "string", required: true, description: "Validator address" }
2998
+ }
2999
+ },
3000
+ {
3001
+ id: "hyperliquid.undelegate",
3002
+ protocolId: HYPERLIQUID_PROTOCOL_ID,
3003
+ chainCategory: "evm",
3004
+ description: "Undelegate HYPE from a validator",
3005
+ commonParams: ["keyGen", "purposeText", "useCustomGas"],
3006
+ params: {
3007
+ hypeHuman: { type: "string", required: true, description: "HYPE amount" },
3008
+ validator: { type: "string", required: true, description: "Validator address" }
3009
+ }
3010
+ }
3011
+ ]
3012
+ };
3013
+ registerProtocolModule(hyperliquidProtocolModule);
2398
3014
  var skillsDir = path.join(path.dirname(url.fileURLToPath((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('catalog.cjs', document.baseURI).href)))), "skills");
2399
3015
  var SKILL_PROTOCOL_IDS = [
2400
3016
  "aave-v4",
@@ -2405,17 +3021,32 @@ var SKILL_PROTOCOL_IDS = [
2405
3021
  "euler-v2",
2406
3022
  "maple-syrup",
2407
3023
  "sky",
2408
- "gmx"
3024
+ "gmx",
3025
+ "hyperliquid"
2409
3026
  ];
2410
3027
  function getToolsForProtocol(protocolId) {
2411
3028
  return MCP_TOOL_DEFINITIONS.filter((t) => t.protocolId === protocolId);
2412
3029
  }
3030
+ function readSharedMultisignMcpGasSection() {
3031
+ try {
3032
+ return fs.readFileSync(path.join(skillsDir, "_shared", "multisign-mcp-gas.md"), "utf8").trim();
3033
+ } catch {
3034
+ return "";
3035
+ }
3036
+ }
2413
3037
  function getProtocolSkill(protocolId) {
2414
3038
  if (!SKILL_PROTOCOL_IDS.includes(protocolId)) {
2415
3039
  return void 0;
2416
3040
  }
2417
3041
  try {
2418
- return fs.readFileSync(path.join(skillsDir, protocolId, "SKILL.md"), "utf8");
3042
+ const skill = fs.readFileSync(path.join(skillsDir, protocolId, "SKILL.md"), "utf8").trim();
3043
+ const shared = readSharedMultisignMcpGasSection();
3044
+ if (!shared) return skill;
3045
+ if (skill.includes("## Gas and MCP submit")) return skill;
3046
+ return `${skill}
3047
+
3048
+ ${shared}
3049
+ `;
2419
3050
  } catch {
2420
3051
  return void 0;
2421
3052
  }
@@ -2674,22 +3305,6 @@ function getProtocolSupportAdvisor(protocolId) {
2674
3305
  function listProtocolSupportAdvisorIds() {
2675
3306
  return Object.keys(PROTOCOL_SUPPORT_ADVISORS);
2676
3307
  }
2677
- var mcpServerCommonInputSchema = zod.z.object({
2678
- keyGenId: zod.z.string().min(1).describe("KeyGen id from fetch_key_gen_result / node preferred KeyGen"),
2679
- chainId: zod.z.number().int().positive().describe("EVM chain id; RPC and gas config resolved from chain registry"),
2680
- purposeText: zod.z.string().min(1).describe("Human-readable purpose for the sign request"),
2681
- useCustomGas: zod.z.boolean().optional().describe("Apply chain gas settings from registry when true")
2682
- });
2683
- function mcpServerMultisignInput(fields) {
2684
- return mcpServerCommonInputSchema.extend(fields);
2685
- }
2686
- var mcpServerSubmitOutputSchema = zod.z.object({
2687
- requestId: zod.z.string().min(1)
2688
- }).describe("mpc-auth multiSignRequest id; continue with trigger_sign_result / broadcast_sign_result");
2689
- var MCP_NON_SUBMIT_TOOL_NAMES = /* @__PURE__ */ new Set([
2690
- "ctm_uniswap_v4_quote",
2691
- "ctm_uniswap_v4_create_swap"
2692
- ]);
2693
3308
 
2694
3309
  // src/agent/catalog.ts
2695
3310
  registerProtocolModule(uniswapV4ProtocolModule);
@@ -2701,6 +3316,7 @@ registerProtocolModule(skyProtocolModule);
2701
3316
  registerProtocolModule(aaveV4ProtocolModule);
2702
3317
  registerProtocolModule(eulerV2ProtocolModule);
2703
3318
  registerProtocolModule(gmxProtocolModule);
3319
+ registerProtocolModule(hyperliquidProtocolModule);
2704
3320
  function getAgentCatalog() {
2705
3321
  return {
2706
3322
  protocols: getProtocolModules(),
@@ -2718,6 +3334,7 @@ function getAgentCatalog() {
2718
3334
  aaveV4: aaveV4ProtocolModule,
2719
3335
  eulerV2: eulerV2ProtocolModule,
2720
3336
  gmx: gmxProtocolModule,
3337
+ hyperliquid: hyperliquidProtocolModule,
2721
3338
  /** Prefer getAgentCatalogForMcp() or getMcpToolDefinitions() for MCP servers. */
2722
3339
  mcp: getAgentCatalogForMcp()
2723
3340
  };
@@ -2730,6 +3347,7 @@ exports.MCP_TOOL_DEFINITIONS = MCP_TOOL_DEFINITIONS;
2730
3347
  exports.MCP_TOOL_INPUT_SCHEMAS = MCP_TOOL_INPUT_SCHEMAS;
2731
3348
  exports.MCP_TOOL_OUTPUT_SCHEMAS = MCP_TOOL_OUTPUT_SCHEMAS;
2732
3349
  exports.MULTISIGN_OUTPUT_DOC = MULTISIGN_OUTPUT_DOC;
3350
+ exports.MULTISIGN_SUBMIT_OUTPUT_DOC = MULTISIGN_SUBMIT_OUTPUT_DOC;
2733
3351
  exports.PROTOCOL_SUPPORT_ADVISORS = PROTOCOL_SUPPORT_ADVISORS;
2734
3352
  exports.chainDetailSchema = chainDetailSchema;
2735
3353
  exports.evmAddressSchema = evmAddressSchema;
@@ -2786,9 +3404,39 @@ exports.mcpGmxFetchStakingPowerOutputSchema = mcpGmxFetchStakingPowerOutputSchem
2786
3404
  exports.mcpGmxGmDepositInputSchema = mcpGmxGmDepositInputSchema;
2787
3405
  exports.mcpGmxGmWithdrawInputSchema = mcpGmxGmWithdrawInputSchema;
2788
3406
  exports.mcpGmxIncreaseInputSchema = mcpGmxIncreaseInputSchema;
2789
- exports.mcpGmxMultisignOutputSchema = multisignOutputSchema;
3407
+ exports.mcpGmxMultisignOutputSchema = mcpServerSubmitOutputSchema;
2790
3408
  exports.mcpGmxStakeGmxInputSchema = mcpGmxStakeGmxInputSchema;
2791
3409
  exports.mcpGmxUnstakeGmxInputSchema = mcpGmxUnstakeGmxInputSchema;
3410
+ exports.mcpHyperliquidCancelInputSchema = mcpHyperliquidCancelInputSchema;
3411
+ exports.mcpHyperliquidCloseInputSchema = mcpHyperliquidCloseInputSchema;
3412
+ exports.mcpHyperliquidDelegateInputSchema = mcpHyperliquidDelegateInputSchema;
3413
+ exports.mcpHyperliquidFetchDelegationsInputSchema = mcpHyperliquidFetchDelegationsInputSchema;
3414
+ exports.mcpHyperliquidFetchDelegationsOutputSchema = mcpHyperliquidFetchDelegationsOutputSchema;
3415
+ exports.mcpHyperliquidFetchMarketSnapshotInputSchema = mcpHyperliquidFetchMarketSnapshotInputSchema;
3416
+ exports.mcpHyperliquidFetchMarketSnapshotOutputSchema = mcpHyperliquidFetchMarketSnapshotOutputSchema;
3417
+ exports.mcpHyperliquidFetchMarketsInputSchema = mcpHyperliquidFetchMarketsInputSchema;
3418
+ exports.mcpHyperliquidFetchMarketsOutputSchema = mcpHyperliquidFetchMarketsOutputSchema;
3419
+ exports.mcpHyperliquidFetchOpenContextInputSchema = mcpHyperliquidFetchOpenContextInputSchema;
3420
+ exports.mcpHyperliquidFetchOpenContextOutputSchema = mcpHyperliquidFetchOpenContextOutputSchema;
3421
+ exports.mcpHyperliquidFetchOpenOrdersInputSchema = mcpHyperliquidFetchOpenOrdersInputSchema;
3422
+ exports.mcpHyperliquidFetchOpenOrdersOutputSchema = mcpHyperliquidFetchOpenOrdersOutputSchema;
3423
+ exports.mcpHyperliquidFetchPositionsInputSchema = mcpHyperliquidFetchPositionsInputSchema;
3424
+ exports.mcpHyperliquidFetchPositionsOutputSchema = mcpHyperliquidFetchPositionsOutputSchema;
3425
+ exports.mcpHyperliquidFetchStakingSummaryInputSchema = mcpHyperliquidFetchStakingSummaryInputSchema;
3426
+ exports.mcpHyperliquidFetchStakingSummaryOutputSchema = mcpHyperliquidFetchStakingSummaryOutputSchema;
3427
+ exports.mcpHyperliquidFetchUsdClassBalancesInputSchema = mcpHyperliquidFetchUsdClassBalancesInputSchema;
3428
+ exports.mcpHyperliquidFetchUsdClassBalancesOutputSchema = mcpHyperliquidFetchUsdClassBalancesOutputSchema;
3429
+ exports.mcpHyperliquidFetchUserVaultEquitiesInputSchema = mcpHyperliquidFetchUserVaultEquitiesInputSchema;
3430
+ exports.mcpHyperliquidFetchUserVaultEquitiesOutputSchema = mcpHyperliquidFetchUserVaultEquitiesOutputSchema;
3431
+ exports.mcpHyperliquidFetchVaultsInputSchema = mcpHyperliquidFetchVaultsInputSchema;
3432
+ exports.mcpHyperliquidFetchVaultsOutputSchema = mcpHyperliquidFetchVaultsOutputSchema;
3433
+ exports.mcpHyperliquidLimitOrderInputSchema = mcpHyperliquidLimitOrderInputSchema;
3434
+ exports.mcpHyperliquidStakeInputSchema = mcpHyperliquidStakeInputSchema;
3435
+ exports.mcpHyperliquidUndelegateInputSchema = mcpHyperliquidUndelegateInputSchema;
3436
+ exports.mcpHyperliquidUnstakeInputSchema = mcpHyperliquidUnstakeInputSchema;
3437
+ exports.mcpHyperliquidUsdTransferInputSchema = mcpHyperliquidUsdTransferInputSchema;
3438
+ exports.mcpHyperliquidVaultDepositInputSchema = mcpHyperliquidVaultDepositInputSchema;
3439
+ exports.mcpHyperliquidVaultWithdrawInputSchema = mcpHyperliquidVaultWithdrawInputSchema;
2792
3440
  exports.mcpLidoClaimWithdrawalInputSchema = mcpLidoClaimWithdrawalInputSchema;
2793
3441
  exports.mcpLidoRequestWithdrawalsInputSchema = mcpLidoRequestWithdrawalsInputSchema;
2794
3442
  exports.mcpLidoSubmitInputSchema = mcpLidoSubmitInputSchema;
@@ -2798,6 +3446,7 @@ exports.mcpMapleDepositInputSchema = mcpMapleDepositInputSchema;
2798
3446
  exports.mcpMapleRequestRedeemInputSchema = mcpMapleRequestRedeemInputSchema;
2799
3447
  exports.mcpMultisignInput = mcpMultisignInput;
2800
3448
  exports.mcpMultisignOutputSchema = multisignOutputSchema;
3449
+ exports.mcpMultisignSubmitOutputSchema = mcpServerSubmitOutputSchema;
2801
3450
  exports.mcpServerCommonInputSchema = mcpServerCommonInputSchema;
2802
3451
  exports.mcpServerMultisignInput = mcpServerMultisignInput;
2803
3452
  exports.mcpServerSubmitOutputSchema = mcpServerSubmitOutputSchema;
@@ -2836,6 +3485,7 @@ exports.mcpUniswapV4RegisterPositionNftOutputSchema = mcpUniswapV4RegisterPositi
2836
3485
  exports.multisignOutputSchema = multisignOutputSchema;
2837
3486
  exports.parseMcpToolInput = parseMcpToolInput;
2838
3487
  exports.parseMcpToolOutput = parseMcpToolOutput;
3488
+ exports.parseMultisignBuilderOutput = parseMultisignBuilderOutput;
2839
3489
  exports.uniswapQuoteTradeTypeSchema = uniswapQuoteTradeTypeSchema;
2840
3490
  exports.zodSchemaToMcpJsonSchema = zodSchemaToMcpJsonSchema;
2841
3491
  //# sourceMappingURL=catalog.cjs.map