@continuumdao/ctm-mpc-defi 0.2.48 → 0.2.50

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.
Files changed (69) hide show
  1. package/dist/agent/catalog.cjs +1664 -5
  2. package/dist/agent/catalog.cjs.map +1 -1
  3. package/dist/agent/catalog.d.ts +2705 -7
  4. package/dist/agent/catalog.js +1599 -6
  5. package/dist/agent/catalog.js.map +1 -1
  6. package/dist/agent/skills/derive/SKILL.md +112 -0
  7. package/dist/agent/skills/hyperliquid/SKILL.md +22 -2
  8. package/dist/agent/skills/trueo/SKILL.md +64 -0
  9. package/dist/chains/evm/index.d.ts +118 -6
  10. package/dist/chains/near/index.d.ts +7 -1
  11. package/dist/chains/solana/index.d.ts +7 -1
  12. package/dist/core/index.cjs +3 -1
  13. package/dist/core/index.cjs.map +1 -1
  14. package/dist/core/index.d.ts +138 -7
  15. package/dist/core/index.js +3 -1
  16. package/dist/core/index.js.map +1 -1
  17. package/dist/index.cjs +3 -1
  18. package/dist/index.cjs.map +1 -1
  19. package/dist/index.d.ts +848 -16
  20. package/dist/index.js +3 -1
  21. package/dist/index.js.map +1 -1
  22. package/dist/protocols/evm/aave-v4/index.d.ts +600 -6
  23. package/dist/protocols/evm/aerodrome/index.cjs.map +1 -1
  24. package/dist/protocols/evm/aerodrome/index.d.ts +125 -5
  25. package/dist/protocols/evm/aerodrome/index.js.map +1 -1
  26. package/dist/protocols/evm/arcus/index.d.ts +66 -2
  27. package/dist/protocols/evm/circle-cctp/index.d.ts +71 -2
  28. package/dist/protocols/evm/compound-v3/index.d.ts +52 -1
  29. package/dist/protocols/evm/continuum-dao/index.d.ts +56 -1
  30. package/dist/protocols/evm/curve-dao/index.d.ts +66 -2
  31. package/dist/protocols/evm/derive/index.cjs +2655 -0
  32. package/dist/protocols/evm/derive/index.cjs.map +1 -0
  33. package/dist/protocols/evm/derive/index.d.ts +859 -0
  34. package/dist/protocols/evm/derive/index.js +2536 -0
  35. package/dist/protocols/evm/derive/index.js.map +1 -0
  36. package/dist/protocols/evm/ethena/index.d.ts +52 -1
  37. package/dist/protocols/evm/euler-v2/index.d.ts +115 -16
  38. package/dist/protocols/evm/gmx/index.d.ts +66 -2
  39. package/dist/protocols/evm/hyperliquid/index.cjs +545 -267
  40. package/dist/protocols/evm/hyperliquid/index.cjs.map +1 -1
  41. package/dist/protocols/evm/hyperliquid/index.d.ts +152 -7
  42. package/dist/protocols/evm/hyperliquid/index.js +535 -269
  43. package/dist/protocols/evm/hyperliquid/index.js.map +1 -1
  44. package/dist/protocols/evm/lido/index.d.ts +52 -1
  45. package/dist/protocols/evm/maple/index.d.ts +52 -1
  46. package/dist/protocols/evm/morpho/index.d.ts +115 -4
  47. package/dist/protocols/evm/pendle/index.cjs +3 -1
  48. package/dist/protocols/evm/pendle/index.cjs.map +1 -1
  49. package/dist/protocols/evm/pendle/index.d.ts +125 -5
  50. package/dist/protocols/evm/pendle/index.js +3 -1
  51. package/dist/protocols/evm/pendle/index.js.map +1 -1
  52. package/dist/protocols/evm/permit2/index.d.ts +14 -1
  53. package/dist/protocols/evm/sky/index.d.ts +52 -1
  54. package/dist/protocols/evm/trueo/index.cjs +2308 -0
  55. package/dist/protocols/evm/trueo/index.cjs.map +1 -0
  56. package/dist/protocols/evm/trueo/index.d.ts +1254 -0
  57. package/dist/protocols/evm/trueo/index.js +2165 -0
  58. package/dist/protocols/evm/trueo/index.js.map +1 -0
  59. package/dist/protocols/evm/uniswap-v4/index.d.ts +78 -4
  60. package/dist/protocols/evm/venice/index.d.ts +52 -1
  61. package/package.json +12 -2
  62. package/dist/buildBatch-tsEUVn_a.d.ts +0 -45
  63. package/dist/eip712Multisign-6oNIlObj.d.ts +0 -39
  64. package/dist/envelope-Cm-llShH.d.ts +0 -37
  65. package/dist/merklDistributor-CdqtZC9N.d.ts +0 -65
  66. package/dist/multisign-Dr0j9fHm.d.ts +0 -489
  67. package/dist/registry-BvsXh0-r.d.ts +0 -8
  68. package/dist/types-RJpoU4Pc.d.ts +0 -34
  69. package/dist/types-lIfv59N1.d.ts +0 -63
@@ -4,6 +4,7 @@ var viem = require('viem');
4
4
  var api = require('@morpho-org/midnight-sdk/api');
5
5
  var zodToJsonSchema = require('zod-to-json-schema');
6
6
  var zod = require('zod');
7
+ require('@msgpack/msgpack');
7
8
  var module$1 = require('module');
8
9
  var url = require('url');
9
10
  var fs = require('fs');
@@ -1302,6 +1303,14 @@ function aliasField(o, target, ...sources) {
1302
1303
  const val = firstDefined(...sources.map((k) => o[k]));
1303
1304
  if (val != null) o[target] = val;
1304
1305
  }
1306
+ function normalizeHyperliquidTrailingOffsetType(o) {
1307
+ const raw = String(o.trailingOffsetType ?? "").trim().toLowerCase();
1308
+ if (!raw) return;
1309
+ if (raw === "price" || raw === "px" || raw === "distance") o.trailingOffsetType = "price";
1310
+ else if (raw === "percentage" || raw === "percent" || raw === "pct" || raw === "%") {
1311
+ o.trailingOffsetType = "percentage";
1312
+ }
1313
+ }
1305
1314
  function derivePurposeIfMissing(o, build) {
1306
1315
  const purposeText = String(o.purposeText ?? o.purpose ?? "").trim();
1307
1316
  if (purposeText) {
@@ -1378,18 +1387,40 @@ function preprocessHyperliquidLimitOrderInput(raw) {
1378
1387
  aliasField(o, "szHuman", "szHuman", "sz", "size");
1379
1388
  aliasField(o, "takeProfitTriggerPxHuman", "takeProfitTriggerPxHuman", "takeProfitPxHuman", "tpTriggerPxHuman", "targetPxHuman");
1380
1389
  aliasField(o, "stopLossTriggerPxHuman", "stopLossTriggerPxHuman", "stopLossPxHuman", "slTriggerPxHuman", "invalidationPxHuman");
1390
+ aliasField(o, "trailingOffsetHuman", "trailingOffsetHuman", "retracement", "trailingOffset");
1391
+ aliasField(o, "trailingOffsetType", "trailingOffsetType", "retracementUnit", "offsetType");
1392
+ aliasField(o, "trailingActivationPxHuman", "trailingActivationPxHuman", "activationPx", "activationPrice");
1393
+ normalizeHyperliquidTrailingOffsetType(o);
1381
1394
  derivePurposeIfMissing(o, (x) => {
1382
1395
  const coin = String(x.coin ?? "").trim();
1383
1396
  const side = x.isBuy === true || x.isBuy === "true" ? "buy" : "sell";
1384
1397
  const sz = String(x.szHuman ?? "").trim();
1385
1398
  const tp = String(x.takeProfitTriggerPxHuman ?? "").trim();
1386
1399
  const sl = String(x.stopLossTriggerPxHuman ?? "").trim();
1400
+ const trail = String(x.trailingOffsetHuman ?? "").trim();
1401
+ if (coin && sz && trail) return `HL trailing ${side} ${coin} ${sz}`;
1387
1402
  if (coin && sz && (tp || sl)) return `HL bracket ${side} ${coin} ${sz}`;
1388
1403
  if (coin && sz) return `HL limit ${side} ${coin} ${sz}`;
1389
1404
  return void 0;
1390
1405
  });
1391
1406
  return o;
1392
1407
  }
1408
+ function preprocessHyperliquidTrailingStopInput(raw) {
1409
+ const o = preprocessHyperliquidCoinInput(raw);
1410
+ if (!preprocessObject(o)) return raw;
1411
+ aliasField(o, "szHuman", "szHuman", "sz", "size");
1412
+ aliasField(o, "trailingOffsetHuman", "trailingOffsetHuman", "retracement", "trailingOffset");
1413
+ aliasField(o, "trailingOffsetType", "trailingOffsetType", "retracementUnit", "offsetType");
1414
+ aliasField(o, "trailingActivationPxHuman", "trailingActivationPxHuman", "activationPx", "activationPrice");
1415
+ normalizeHyperliquidTrailingOffsetType(o);
1416
+ derivePurposeIfMissing(o, (x) => {
1417
+ const coin = String(x.coin ?? "").trim();
1418
+ const offset = String(x.trailingOffsetHuman ?? "").trim();
1419
+ if (coin && offset) return `HL trailing stop ${coin} ${offset}`;
1420
+ return void 0;
1421
+ });
1422
+ return o;
1423
+ }
1393
1424
  function preprocessHyperliquidCloseInput(raw) {
1394
1425
  const o = preprocessHyperliquidCoinInput(raw);
1395
1426
  if (!preprocessObject(o)) return raw;
@@ -2716,7 +2747,15 @@ var MCP_NON_SUBMIT_TOOL_NAMES = /* @__PURE__ */ new Set([
2716
2747
  "ctm_uniswap_v4_limit_order_quote",
2717
2748
  "ctm_uniswap_v4_fetch_limit_orders",
2718
2749
  "ctm_uniswap_v4_check_permissions",
2719
- "ctm_uniswap_v4_kyc_apply_link"
2750
+ "ctm_uniswap_v4_kyc_apply_link",
2751
+ "search_prediction_markets",
2752
+ "get_prediction_market",
2753
+ "ctm_trueo_fetch_categories",
2754
+ "ctm_trueo_fetch_trending",
2755
+ "ctm_trueo_search_markets",
2756
+ "ctm_trueo_fetch_market",
2757
+ "ctm_trueo_fetch_chance_series",
2758
+ "ctm_trueo_fetch_orderbook"
2720
2759
  ]);
2721
2760
 
2722
2761
  // src/agent/schemas/protocols.ts
@@ -4572,6 +4611,34 @@ var mcpGmxFetchOhlcvOutputSchema = zod.z.object({
4572
4611
  candleCount: zod.z.number().int().nonnegative(),
4573
4612
  candles: zod.z.array(gmxOhlcvCandleSchema)
4574
4613
  });
4614
+ function hyperliquidFloatToWire(value) {
4615
+ const n = typeof value === "number" ? value : Number.parseFloat(String(value).trim());
4616
+ if (!Number.isFinite(n)) throw new Error("Invalid Hyperliquid wire number.");
4617
+ const rounded = n.toFixed(8);
4618
+ if (Math.abs(Number.parseFloat(rounded) - n) >= 1e-12) {
4619
+ throw new Error(`Hyperliquid wire value ${value} has too many decimal places.`);
4620
+ }
4621
+ const normalized = Number(rounded === "-0" ? "0" : rounded);
4622
+ return String(normalized);
4623
+ }
4624
+ var HYPERLIQUID_TRAILING_ACTIVATION_PX_ERROR = "Invalid trailing activation price.";
4625
+ var POSITIVE_DECIMAL_RE = /^\d+(\.\d+)?$/;
4626
+ function parseHyperliquidTrailingActivationPx(value) {
4627
+ if (value == null) return null;
4628
+ const raw = String(value).trim().replace(/,/g, "");
4629
+ if (!raw) return null;
4630
+ if (!POSITIVE_DECIMAL_RE.test(raw)) {
4631
+ throw new Error(HYPERLIQUID_TRAILING_ACTIVATION_PX_ERROR);
4632
+ }
4633
+ const px = Number.parseFloat(raw);
4634
+ if (!Number.isFinite(px) || px <= 0) {
4635
+ throw new Error(HYPERLIQUID_TRAILING_ACTIVATION_PX_ERROR);
4636
+ }
4637
+ hyperliquidFloatToWire(raw);
4638
+ return raw;
4639
+ }
4640
+
4641
+ // src/agent/schemas/hyperliquid.ts
4575
4642
  function mcpHyperliquidMultisignInput(fields, preprocess) {
4576
4643
  const inner = evmMultisignCommonInputSchema.extend(fields);
4577
4644
  const shaped = preprocess ? zod.z.preprocess(preprocess, inner) : inner;
@@ -4719,7 +4786,16 @@ var mcpHyperliquidFetchOpenOrdersOutputSchema = zod.z.object({
4719
4786
  sz: zod.z.string(),
4720
4787
  oid: zod.z.number().describe("Pass to build_cancel_multisign as oid"),
4721
4788
  timestamp: zod.z.number(),
4722
- reduceOnly: zod.z.boolean().optional()
4789
+ reduceOnly: zod.z.boolean().optional(),
4790
+ isTrigger: zod.z.boolean().optional(),
4791
+ triggerPx: zod.z.string().optional(),
4792
+ triggerCondition: zod.z.string().optional(),
4793
+ orderType: zod.z.string().optional(),
4794
+ trailingStop: zod.z.object({
4795
+ retracement: zod.z.string(),
4796
+ activationPx: zod.z.string().nullable(),
4797
+ bestPx: zod.z.string().nullable()
4798
+ }).nullable().optional()
4723
4799
  })
4724
4800
  )
4725
4801
  });
@@ -4844,6 +4920,16 @@ var mcpHyperliquidFetchDelegationsOutputSchema = zod.z.object({
4844
4920
  )
4845
4921
  });
4846
4922
  var hyperliquidTpslExecModeSchema = zod.z.enum(["limit_at_trigger", "market"]);
4923
+ var mcpHyperliquidTrailingActivationPxSchema = zod.z.string().min(1).optional().superRefine((value, ctx) => {
4924
+ try {
4925
+ parseHyperliquidTrailingActivationPx(value);
4926
+ } catch (e) {
4927
+ ctx.addIssue({
4928
+ code: zod.z.ZodIssueCode.custom,
4929
+ message: e instanceof Error ? e.message : "Invalid trailing activation price."
4930
+ });
4931
+ }
4932
+ }).describe("Optional mark price where trailing tracking begins. Omit to start immediately.");
4847
4933
  var mcpHyperliquidLimitOrderInputSchema = mcpHyperliquidMultisignInput(
4848
4934
  {
4849
4935
  coin: zod.z.string().min(1).describe("coin from fetch_markets (name) or search_markets"),
@@ -4855,10 +4941,30 @@ var mcpHyperliquidLimitOrderInputSchema = mcpHyperliquidMultisignInput(
4855
4941
  dex: zod.z.string().optional(),
4856
4942
  takeProfitTriggerPxHuman: zod.z.string().min(1).optional().describe("Take-profit trigger price \u2014 with SL enables L1 normalTpsl bracket (EIP-712, not CoreWriter)."),
4857
4943
  stopLossTriggerPxHuman: zod.z.string().min(1).optional().describe("Stop-loss trigger price \u2014 with TP enables L1 normalTpsl bracket (EIP-712, not CoreWriter)."),
4858
- tpslExecMode: hyperliquidTpslExecModeSchema.optional().describe("Trigger execution: limit_at_trigger (default) or market.")
4944
+ tpslExecMode: hyperliquidTpslExecModeSchema.optional().describe("Trigger execution: limit_at_trigger (default) or market."),
4945
+ trailingOffsetHuman: zod.z.string().min(1).optional().describe(
4946
+ "Trailing-stop retracement (price distance or percent). Cannot combine with stopLossTriggerPxHuman. Perp only \u2014 EIP-712 /exchange."
4947
+ ),
4948
+ trailingOffsetType: zod.z.enum(["price", "percentage"]).optional().describe("price = fixed distance; percentage = retracement rate (default)."),
4949
+ trailingActivationPxHuman: mcpHyperliquidTrailingActivationPxSchema
4859
4950
  },
4860
4951
  preprocessHyperliquidLimitOrderInput
4861
4952
  );
4953
+ var mcpHyperliquidTrailingStopInputSchema = mcpHyperliquidMultisignInput(
4954
+ {
4955
+ coin: zod.z.string().min(1).describe("perp coin from fetch_markets or fetch_positions"),
4956
+ isBuy: agentBooleanSchema().describe(
4957
+ "Execution side: false to close a long / open a short; true to close a short / open a long."
4958
+ ),
4959
+ szHuman: zod.z.string().min(1).describe("Size in coin units (use position size to close)."),
4960
+ reduceOnly: agentBooleanSchema().optional().describe("true (default) closes/reduces; false can open a position."),
4961
+ trailingOffsetHuman: zod.z.string().min(1).describe("Retracement distance or percent (e.g. 2 or 2%)."),
4962
+ trailingOffsetType: zod.z.enum(["price", "percentage"]).optional().describe("price = fixed distance; percentage = retracement rate (default)."),
4963
+ trailingActivationPxHuman: mcpHyperliquidTrailingActivationPxSchema,
4964
+ dex: zod.z.string().optional()
4965
+ },
4966
+ preprocessHyperliquidTrailingStopInput
4967
+ );
4862
4968
  var mcpHyperliquidCloseInputSchema = mcpHyperliquidMultisignInput(
4863
4969
  {
4864
4970
  coin: zod.z.string().min(1),
@@ -5190,6 +5296,512 @@ var mcpArcusBuildWithdrawMultisignInputSchema = withMultisignKeySourceRefine(
5190
5296
  product: arcusFundProductSchema
5191
5297
  })
5192
5298
  );
5299
+ var mcpTrueoFetchCategoriesInputSchema = zod.z.object({}).passthrough();
5300
+ var mcpTrueoFetchCategoriesOutputSchema = zod.z.object({
5301
+ categories: zod.z.array(zod.z.object({ id: zod.z.number(), name: zod.z.string() })),
5302
+ chainId: zod.z.number()
5303
+ });
5304
+ var mcpTrueoMarketRowSchema = zod.z.object({
5305
+ address: zod.z.string(),
5306
+ question: zod.z.string(),
5307
+ rules: zod.z.string(),
5308
+ source: zod.z.string(),
5309
+ categories: zod.z.array(zod.z.string()),
5310
+ size: zod.z.string(),
5311
+ tvl: zod.z.number().nullable(),
5312
+ yesTokenAddress: zod.z.string(),
5313
+ noTokenAddress: zod.z.string(),
5314
+ yesPoolAddress: zod.z.string(),
5315
+ noPoolAddress: zod.z.string(),
5316
+ paymentTokenAddress: zod.z.string(),
5317
+ paymentTokenSymbol: zod.z.string(),
5318
+ paymentTokenDecimals: zod.z.number(),
5319
+ endOfTrading: zod.z.number(),
5320
+ status: zod.z.number(),
5321
+ outcome: zod.z.number().optional(),
5322
+ statusUpdatedAt: zod.z.string().nullable().optional(),
5323
+ imageUrl: zod.z.string().nullable(),
5324
+ yesPoolTick: zod.z.number().nullable(),
5325
+ noPoolTick: zod.z.number().nullable(),
5326
+ yesPoolSqrtPriceX96: zod.z.string().nullable(),
5327
+ noPoolSqrtPriceX96: zod.z.string().nullable(),
5328
+ yesPrice: zod.z.number().nullable(),
5329
+ noPrice: zod.z.number().nullable(),
5330
+ yesPriceLabel: zod.z.string().nullable(),
5331
+ noPriceLabel: zod.z.string().nullable(),
5332
+ expiresAt: zod.z.string().nullable(),
5333
+ expiresAtLabel: zod.z.string().nullable(),
5334
+ chainId: zod.z.number(),
5335
+ network: zod.z.string()
5336
+ });
5337
+ var mcpTrueoFetchTrendingInputSchema = zod.z.object({
5338
+ limit: zod.z.number().int().positive().optional(),
5339
+ includeAll: agentOptionalBooleanSchema().describe(
5340
+ "If true, include older closed/resolved markets. Default: live and recently finished (14 days)."
5341
+ )
5342
+ });
5343
+ var mcpTrueoFetchTrendingOutputSchema = zod.z.object({
5344
+ markets: zod.z.array(mcpTrueoMarketRowSchema),
5345
+ notes: zod.z.string(),
5346
+ hasMore: zod.z.boolean().optional(),
5347
+ nextOffset: zod.z.number().int().nonnegative().optional()
5348
+ });
5349
+ var mcpTrueoSearchMarketsInputSchema = zod.z.object({
5350
+ query: zod.z.string().optional().describe("Search haystack: question, rules, categories, address"),
5351
+ category: zod.z.string().optional().describe("Category name from fetch_categories, e.g. Politics"),
5352
+ limit: zod.z.number().int().positive().optional(),
5353
+ offset: zod.z.number().int().nonnegative().optional(),
5354
+ includeAll: agentOptionalBooleanSchema().describe(
5355
+ "If true, include older closed/resolved markets. Default: live and recently finished (14 days)."
5356
+ ),
5357
+ excludeAddresses: zod.z.array(zod.z.string()).optional().describe("Skip these market addresses (after trending, pass the listed addresses).")
5358
+ });
5359
+ var mcpTrueoSearchMarketsOutputSchema = mcpTrueoFetchTrendingOutputSchema;
5360
+ var mcpTrueoFetchMarketInputSchema = zod.z.object({
5361
+ marketAddress: evmAddressSchema.describe("Trueo market address")
5362
+ });
5363
+ var mcpTrueoFetchMarketOutputSchema = mcpTrueoMarketRowSchema;
5364
+ var mcpTrueoFetchChanceSeriesInputSchema = zod.z.object({
5365
+ poolId: zod.z.string().min(1).describe("Yes or No pool id from fetch_market"),
5366
+ from: zod.z.number().optional(),
5367
+ to: zod.z.number().optional(),
5368
+ resolution: zod.z.string().optional().describe("Sample step in seconds (3600 = hourly). 1H/1D/1W/All coerce to hourly \u2014 Trueo rejects calendar 1D/1W."),
5369
+ lookbackDays: zod.z.number().optional()
5370
+ });
5371
+ var mcpTrueoFetchChanceSeriesOutputSchema = zod.z.object({
5372
+ poolId: zod.z.string(),
5373
+ bars: zod.z.array(
5374
+ zod.z.object({
5375
+ timestamp: zod.z.number(),
5376
+ open: zod.z.number(),
5377
+ high: zod.z.number(),
5378
+ low: zod.z.number(),
5379
+ close: zod.z.number()
5380
+ })
5381
+ ),
5382
+ from: zod.z.number(),
5383
+ to: zod.z.number(),
5384
+ resolution: zod.z.string(),
5385
+ notes: zod.z.string().optional()
5386
+ });
5387
+ var mcpTrueoFetchOrderbookInputSchema = zod.z.object({
5388
+ marketAddress: evmAddressSchema,
5389
+ side: zod.z.enum(["yes", "no"]).optional(),
5390
+ rpcUrl: zod.z.string().min(1).optional().describe("Server-filled from chain registry. Agents should omit.")
5391
+ });
5392
+ var mcpTrueoFetchOrderbookOutputSchema = zod.z.object({
5393
+ marketAddress: zod.z.string(),
5394
+ side: zod.z.enum(["yes", "no"]),
5395
+ poolId: zod.z.string(),
5396
+ currentTick: zod.z.number().nullable(),
5397
+ impliedPrice: zod.z.number().nullable(),
5398
+ impliedPriceLabel: zod.z.string().nullable(),
5399
+ levels: zod.z.array(zod.z.record(zod.z.unknown())),
5400
+ recentTrades: zod.z.array(zod.z.record(zod.z.unknown())),
5401
+ notes: zod.z.string()
5402
+ });
5403
+ var mcpSearchPredictionMarketsInputSchema = zod.z.object({
5404
+ query: zod.z.string().optional().describe(
5405
+ "Pass the operator topic verbatim (case-insensitive title substring). Do not substitute a category name. Empty lists trending."
5406
+ ),
5407
+ category: zod.z.string().optional().describe("Venue category, e.g. Politics"),
5408
+ venues: zod.z.array(zod.z.string()).optional().describe("Optional venue filter. v1: trueo"),
5409
+ trending: agentOptionalBooleanSchema().describe(
5410
+ "Trending board only when query and category are empty. Ignored when query is set."
5411
+ ),
5412
+ includeAll: agentOptionalBooleanSchema().describe(
5413
+ "If true, include older closed/resolved markets. Default: live and recently finished (14 days)."
5414
+ ),
5415
+ limit: zod.z.number().int().positive().optional().describe("Page size. Default 10 (trending API max)."),
5416
+ offset: zod.z.number().int().nonnegative().optional().describe("Search offset for the next page. Trending is page 1 only."),
5417
+ indexBase: zod.z.number().int().nonnegative().optional().describe("Start #N at indexBase+1 so pages continue 11, 12, \u2026"),
5418
+ excludeAddresses: zod.z.array(zod.z.string()).optional().describe("Skip these venueMarketIds (after trending, pass the listed ids).")
5419
+ });
5420
+ var mcpPredictionMarketRowSchema = zod.z.object({
5421
+ venue: zod.z.string(),
5422
+ venueMarketId: zod.z.string(),
5423
+ question: zod.z.string(),
5424
+ categories: zod.z.array(zod.z.string()),
5425
+ yesPrice: zod.z.number().nullable(),
5426
+ noPrice: zod.z.number().nullable(),
5427
+ yesPriceLabel: zod.z.string().nullable(),
5428
+ noPriceLabel: zod.z.string().nullable(),
5429
+ volume: zod.z.string(),
5430
+ tvl: zod.z.number().nullable(),
5431
+ expiresAt: zod.z.string().nullable(),
5432
+ expiresAtLabel: zod.z.string().nullable(),
5433
+ tradingEndsLabel: zod.z.string().optional(),
5434
+ endOfTrading: zod.z.number().optional(),
5435
+ status: zod.z.string(),
5436
+ outcome: zod.z.number().optional(),
5437
+ statusUpdatedAt: zod.z.string().nullable().optional(),
5438
+ resolutionLabel: zod.z.string().nullable().optional(),
5439
+ chainId: zod.z.number(),
5440
+ paymentSymbol: zod.z.string(),
5441
+ tradable: zod.z.boolean(),
5442
+ index: zod.z.number().int().positive().optional(),
5443
+ rules: zod.z.string().optional(),
5444
+ source: zod.z.string().optional(),
5445
+ imageUrl: zod.z.string().nullable().optional(),
5446
+ ohlc: zod.z.array(
5447
+ zod.z.object({
5448
+ timestamp: zod.z.number(),
5449
+ open: zod.z.number(),
5450
+ high: zod.z.number(),
5451
+ low: zod.z.number(),
5452
+ close: zod.z.number()
5453
+ })
5454
+ ).optional().describe("Hourly Yes-chance samples for the Mini App graph (get_prediction_market).")
5455
+ });
5456
+ var mcpSearchPredictionMarketsOutputSchema = zod.z.object({
5457
+ markets: zod.z.array(mcpPredictionMarketRowSchema),
5458
+ notes: zod.z.string(),
5459
+ hasMore: zod.z.boolean().optional(),
5460
+ nextOffset: zod.z.number().int().nonnegative().optional(),
5461
+ nextIndexBase: zod.z.number().int().nonnegative().optional(),
5462
+ includeAll: zod.z.boolean().optional()
5463
+ });
5464
+ var mcpListMyPredictionMarketsInputSchema = zod.z.object({
5465
+ tokenAddresses: zod.z.array(zod.z.string()).optional().describe("YES/NO token addresses from get_token_registry (or added after a bet)."),
5466
+ marketAddresses: zod.z.array(zod.z.string()).optional().describe("Trueo market addresses from prior bets.")
5467
+ });
5468
+ var mcpListMyPredictionMarketsOutputSchema = mcpSearchPredictionMarketsOutputSchema;
5469
+ var mcpGetPredictionMarketInputSchema = zod.z.object({
5470
+ venue: zod.z.string().optional().describe("Default trueo"),
5471
+ venueMarketId: zod.z.string().min(1).describe("Venue id (Trueo: market address)")
5472
+ });
5473
+ var mcpGetPredictionMarketOutputSchema = mcpPredictionMarketRowSchema.passthrough();
5474
+ var mcpTrueoWrapTydInputSchema = mcpMultisignInput({
5475
+ amountHuman: zod.z.string().min(1).describe("USDC amount to deposit into the TYD vault")
5476
+ });
5477
+ var mcpTrueoUnwrapTydInputSchema = mcpMultisignInput({
5478
+ amountHuman: zod.z.string().min(1).describe("TYD share amount to redeem for USDC")
5479
+ });
5480
+ var mcpTrueoMintInputSchema = mcpMultisignInput({
5481
+ marketAddress: evmAddressSchema,
5482
+ amountHuman: zod.z.string().min(1).describe("TYD (or USDC when paymentKind=usdc) amount"),
5483
+ paymentKind: zod.z.enum(["tyd", "usdc"]).optional()
5484
+ });
5485
+ var mcpTrueoBurnInputSchema = mcpTrueoMintInputSchema;
5486
+ var mcpTrueoRedeemInputSchema = mcpTrueoMintInputSchema;
5487
+ var mcpTrueoSwapInputSchema = mcpMultisignInput({
5488
+ marketAddress: evmAddressSchema,
5489
+ side: zod.z.enum(["yes", "no"]),
5490
+ amountHuman: zod.z.string().min(1).describe("TYD amount in"),
5491
+ amountOutMinimumHuman: zod.z.string().optional()
5492
+ });
5493
+ var mcpTrueoCreateOrderInputSchema = mcpMultisignInput({
5494
+ marketAddress: evmAddressSchema,
5495
+ side: zod.z.enum(["yes", "no"]),
5496
+ amountHuman: zod.z.string().min(1),
5497
+ tickLower: zod.z.number().int(),
5498
+ tickUpper: zod.z.number().int(),
5499
+ enablePartialFill: agentOptionalBooleanSchema()
5500
+ });
5501
+ var mcpTrueoCancelOrderInputSchema = mcpMultisignInput({
5502
+ marketAddress: evmAddressSchema,
5503
+ side: zod.z.enum(["yes", "no"]),
5504
+ orderId: zod.z.number().int().nonnegative()
5505
+ });
5506
+ function mcpDeriveMultisignInput(fields) {
5507
+ return withMultisignKeySourceRefine(evmMultisignCommonInputSchema.extend(fields));
5508
+ }
5509
+ var deriveAuthSchema = zod.z.object({
5510
+ wallet: zod.z.string().min(1),
5511
+ timestamp: zod.z.string().min(1),
5512
+ signature: zod.z.string().min(1)
5513
+ }).optional().describe("Server-filled EIP-191 login (X-DeriveWallet / Timestamp / Signature). Agents must not pass auth.");
5514
+ var deriveNetworkSchema = zod.z.enum(["mainnet", "testnet"]).optional();
5515
+ var deriveFetchBaseSchema = zod.z.object({
5516
+ chainId: zod.z.coerce.number().int().positive().optional().describe("Asset-row chain (dialog context). Trading is always Derive API."),
5517
+ network: deriveNetworkSchema
5518
+ });
5519
+ var deriveWalletSchema = deriveFetchBaseSchema.extend({
5520
+ wallet: evmAddressSchema.optional(),
5521
+ executorAddress: evmAddressSchema.optional().describe("MPC executor \u2014 same address is the Derive owner on every chain."),
5522
+ auth: deriveAuthSchema
5523
+ });
5524
+ var deriveOhlcvIntervalSchema = zod.z.enum(["1m", "5m", "15m", "30m", "1h", "4h", "1d", "1w"]);
5525
+ var deriveOhlcvCandleSchema = zod.z.object({
5526
+ timestampMs: zod.z.number(),
5527
+ open: zod.z.string(),
5528
+ high: zod.z.string(),
5529
+ low: zod.z.string(),
5530
+ close: zod.z.string(),
5531
+ volume: zod.z.string()
5532
+ });
5533
+ var mcpDeriveFetchCurrenciesInputSchema = deriveFetchBaseSchema;
5534
+ var mcpDeriveFetchCurrenciesOutputSchema = zod.z.object({
5535
+ currencies: zod.z.array(zod.z.object({ currency: zod.z.string() })),
5536
+ network: zod.z.string().optional()
5537
+ });
5538
+ var mcpDeriveFetchOptionChainInputSchema = deriveFetchBaseSchema.extend({
5539
+ currency: zod.z.string().min(1).describe("Underlying currency e.g. ETH"),
5540
+ expired: zod.z.boolean().optional()
5541
+ });
5542
+ var mcpDeriveFetchOptionChainOutputSchema = zod.z.object({
5543
+ currency: zod.z.string(),
5544
+ instrumentCount: zod.z.number(),
5545
+ callCount: zod.z.number(),
5546
+ putCount: zod.z.number(),
5547
+ expiries: zod.z.array(
5548
+ zod.z.object({
5549
+ expiryYmd: zod.z.string(),
5550
+ expiryUnix: zod.z.number().nullable(),
5551
+ callCount: zod.z.number(),
5552
+ putCount: zod.z.number(),
5553
+ minStrike: zod.z.string().nullable(),
5554
+ maxStrike: zod.z.string().nullable()
5555
+ })
5556
+ ),
5557
+ notes: zod.z.string(),
5558
+ network: zod.z.string().optional()
5559
+ });
5560
+ var mcpDeriveFetchTickersInputSchema = deriveFetchBaseSchema.extend({
5561
+ currency: zod.z.string().min(1).describe("Underlying e.g. ETH"),
5562
+ expiryDate: zod.z.union([zod.z.string().min(1), zod.z.number().int().positive()]).describe("YYYYMMDD from fetch_option_chain. String or number (20260925). 2026-09-25 is ok."),
5563
+ optionType: zod.z.enum(["C", "P"]).optional().describe("Calls only or puts only. Omit for both."),
5564
+ ladder: zod.z.enum(["atm", "all"]).optional().describe("Default atm (~9 strikes around index). Use all only when the operator wants every strike.")
5565
+ });
5566
+ var mcpDeriveFetchTickersOutputSchema = zod.z.object({
5567
+ currency: zod.z.string(),
5568
+ expiryDate: zod.z.string(),
5569
+ optionType: zod.z.enum(["C", "P"]).nullable().optional(),
5570
+ ladder: zod.z.enum(["atm", "all"]).optional(),
5571
+ indexPx: zod.z.string().nullable().optional(),
5572
+ listedCount: zod.z.number().optional(),
5573
+ tickerCount: zod.z.number().optional(),
5574
+ callCount: zod.z.number().optional(),
5575
+ putCount: zod.z.number().optional(),
5576
+ tickers: zod.z.array(
5577
+ zod.z.object({
5578
+ instrumentName: zod.z.string(),
5579
+ bidPx: zod.z.string().nullable(),
5580
+ askPx: zod.z.string().nullable(),
5581
+ markPx: zod.z.string().nullable(),
5582
+ indexPx: zod.z.string().nullable(),
5583
+ strike: zod.z.string().nullable(),
5584
+ expiry: zod.z.number().nullable(),
5585
+ expiryYmd: zod.z.string().nullable(),
5586
+ optionType: zod.z.enum(["C", "P"]).nullable(),
5587
+ greeks: zod.z.unknown().nullable()
5588
+ })
5589
+ ),
5590
+ notes: zod.z.string().optional(),
5591
+ network: zod.z.string().optional()
5592
+ });
5593
+ var mcpDeriveSearchInstrumentsInputSchema = deriveFetchBaseSchema.extend({
5594
+ currency: zod.z.string().min(1),
5595
+ query: zod.z.string().min(1).describe("Instrument name fragment e.g. 3000-C or 20260626"),
5596
+ limit: zod.z.coerce.number().int().positive().max(50).optional()
5597
+ });
5598
+ var mcpDeriveSearchInstrumentsOutputSchema = zod.z.object({
5599
+ instruments: zod.z.array(zod.z.object({ instrumentName: zod.z.string() })),
5600
+ network: zod.z.string().optional()
5601
+ });
5602
+ var mcpDeriveFetchMarketSnapshotInputSchema = deriveFetchBaseSchema.extend({
5603
+ instrumentName: zod.z.string().min(1).describe("e.g. ETH-20260626-3000-C")
5604
+ });
5605
+ var mcpDeriveFetchMarketSnapshotOutputSchema = zod.z.object({
5606
+ snapshot: zod.z.object({
5607
+ instrumentName: zod.z.string(),
5608
+ livePrice: zod.z.object({
5609
+ markPx: zod.z.string().nullable(),
5610
+ indexPx: zod.z.string().nullable(),
5611
+ bidPx: zod.z.string().nullable(),
5612
+ askPx: zod.z.string().nullable(),
5613
+ midUsd: zod.z.string(),
5614
+ source: zod.z.string()
5615
+ }),
5616
+ greeks: zod.z.unknown().nullable(),
5617
+ fetchedAtMs: zod.z.number()
5618
+ }),
5619
+ network: zod.z.string().optional()
5620
+ });
5621
+ var mcpDeriveFetchOhlcvInputSchema = deriveFetchBaseSchema.extend({
5622
+ instrumentName: zod.z.string().optional().describe("Required for option candles"),
5623
+ currency: zod.z.string().optional().describe("Required for index candles (underlying spot)"),
5624
+ marketKind: zod.z.enum(["option", "index"]).optional(),
5625
+ interval: deriveOhlcvIntervalSchema.optional(),
5626
+ lookbackDays: zod.z.coerce.number().positive().optional(),
5627
+ lookbackHours: zod.z.coerce.number().positive().optional(),
5628
+ startTimeMs: zod.z.coerce.number().int().positive().optional(),
5629
+ endTimeMs: zod.z.coerce.number().int().positive().optional()
5630
+ });
5631
+ var mcpDeriveFetchOhlcvOutputSchema = zod.z.object({
5632
+ ohlcv: zod.z.object({
5633
+ market: zod.z.string(),
5634
+ coin: zod.z.string(),
5635
+ interval: zod.z.string(),
5636
+ marketKind: zod.z.enum(["option", "index"]),
5637
+ startTimeMs: zod.z.number(),
5638
+ endTimeMs: zod.z.number(),
5639
+ expectedBars: zod.z.number(),
5640
+ candleCount: zod.z.number(),
5641
+ latestCandle: deriveOhlcvCandleSchema.nullable(),
5642
+ candles: zod.z.array(deriveOhlcvCandleSchema),
5643
+ fetchedAtMs: zod.z.number(),
5644
+ dataSource: zod.z.literal("derive")
5645
+ }),
5646
+ dataSource: zod.z.literal("derive"),
5647
+ network: zod.z.string().optional()
5648
+ });
5649
+ var mcpDeriveOrderQuoteInputSchema = deriveFetchBaseSchema.extend({
5650
+ instrumentName: zod.z.string().min(1),
5651
+ direction: zod.z.enum(["buy", "sell"]),
5652
+ amount: zod.z.string().min(1),
5653
+ limitPrice: zod.z.string().min(1),
5654
+ subaccountId: agentCoercedIntSchema(zod.z.number().int().positive()).optional().describe("Required by v3 public/order_quote. From ctm_derive_fetch_subaccounts. Never 0.")
5655
+ });
5656
+ var mcpDeriveOrderQuoteOutputSchema = zod.z.object({
5657
+ quote: jsonObjectSchema,
5658
+ instrumentName: zod.z.string(),
5659
+ network: zod.z.string().optional()
5660
+ });
5661
+ var mcpDeriveFetchRiskUniversesInputSchema = deriveFetchBaseSchema;
5662
+ var mcpDeriveFetchRiskUniversesOutputSchema = zod.z.object({
5663
+ universes: zod.z.array(zod.z.unknown()),
5664
+ notes: zod.z.string(),
5665
+ network: zod.z.string().optional()
5666
+ });
5667
+ var mcpDeriveFetchPendingDepositsInputSchema = deriveWalletSchema;
5668
+ var mcpDeriveFetchPendingDepositsOutputSchema = zod.z.object({
5669
+ pending: zod.z.array(zod.z.unknown()),
5670
+ credited: zod.z.boolean(),
5671
+ notes: zod.z.string(),
5672
+ network: zod.z.string().optional()
5673
+ });
5674
+ var mcpDeriveFetchSubaccountsInputSchema = deriveWalletSchema;
5675
+ var mcpDeriveFetchSubaccountsOutputSchema = zod.z.object({
5676
+ wallet: zod.z.string(),
5677
+ subaccounts: zod.z.array(zod.z.number()),
5678
+ funded: zod.z.boolean(),
5679
+ notes: zod.z.string(),
5680
+ next: zod.z.array(zod.z.string()),
5681
+ network: zod.z.string().optional()
5682
+ });
5683
+ var deriveSubaccountInput = deriveWalletSchema.extend({
5684
+ subaccountId: agentCoercedIntSchema(zod.z.number().int().positive()).describe(
5685
+ "subaccountId from ctm_derive_fetch_subaccounts. Never 0. If that list is empty, deposit on Ethereum L1 first."
5686
+ )
5687
+ });
5688
+ var mcpDeriveFetchPortfolioInputSchema = deriveSubaccountInput;
5689
+ var mcpDeriveFetchPortfolioOutputSchema = zod.z.object({
5690
+ portfolio: zod.z.unknown(),
5691
+ subaccountId: zod.z.number(),
5692
+ wallet: zod.z.string(),
5693
+ network: zod.z.string().optional()
5694
+ });
5695
+ var mcpDeriveFetchPositionsInputSchema = deriveSubaccountInput;
5696
+ var mcpDeriveFetchPositionsOutputSchema = zod.z.object({
5697
+ positions: zod.z.array(zod.z.unknown()),
5698
+ subaccountId: zod.z.number(),
5699
+ wallet: zod.z.string(),
5700
+ network: zod.z.string().optional()
5701
+ });
5702
+ var mcpDeriveFetchOpenOrdersInputSchema = deriveSubaccountInput;
5703
+ var mcpDeriveFetchOpenOrdersOutputSchema = zod.z.object({
5704
+ orders: zod.z.array(zod.z.unknown()),
5705
+ subaccountId: zod.z.number(),
5706
+ wallet: zod.z.string(),
5707
+ network: zod.z.string().optional()
5708
+ });
5709
+ var deriveSubaccountIdField = agentCoercedIntSchema(zod.z.number().int().positive()).describe(
5710
+ "subaccountId from ctm_derive_fetch_subaccounts. Collateral lives on Ethereum L1; EIP-712 orders do not move the current-chain token. If none exist, deposit first."
5711
+ );
5712
+ var mcpDeriveDepositNewSubaccountInputSchema = mcpDeriveMultisignInput({
5713
+ protocolAsset: evmAddressSchema.describe("collaterals[].address from ctm_derive_fetch_risk_universes"),
5714
+ underlyingErc20: evmAddressSchema.describe("collaterals[].erc20.underlying_erc20 on Ethereum L1 (usually USDC)"),
5715
+ amountHuman: zod.z.string().min(1).describe("Deposit amount in underlying token units"),
5716
+ managerId: agentCoercedIntSchema(zod.z.number().int().positive()).describe("Risk-universe manager_id"),
5717
+ actionManager: evmAddressSchema.optional().describe("Override ACTION_MANAGER (required on mainnet until published)")
5718
+ });
5719
+ var mcpDeriveRegisterDepositAddressInputSchema = deriveFetchBaseSchema.extend({
5720
+ wallet: evmAddressSchema,
5721
+ managerId: agentCoercedIntSchema(zod.z.number().int().positive()).optional(),
5722
+ subaccountId: agentCoercedIntSchema(zod.z.number().int().nonnegative()).optional()
5723
+ });
5724
+ var mcpDeriveRegisterDepositAddressOutputSchema = zod.z.object({
5725
+ depositAddress: evmAddressSchema,
5726
+ wallet: evmAddressSchema,
5727
+ managerId: zod.z.number().int().nullable(),
5728
+ subaccountId: zod.z.number().int().nullable(),
5729
+ network: zod.z.string(),
5730
+ notes: zod.z.string()
5731
+ });
5732
+ var mcpDeriveDepositAddressTransferInputSchema = mcpDeriveMultisignInput({
5733
+ underlyingErc20: evmAddressSchema.describe("Ethereum L1 token to send (usually USDC)"),
5734
+ amountHuman: zod.z.string().min(1),
5735
+ depositAddress: evmAddressSchema.describe("From ctm_derive_register_deposit_address")
5736
+ });
5737
+ var mcpDeriveSocketDepositInputSchema = mcpDeriveMultisignInput({
5738
+ token: evmAddressSchema.describe("USDC / WETH / WBTC on this chain, or native 0x0 to wrap WETH"),
5739
+ amountHuman: zod.z.string().min(1),
5740
+ receiver: evmAddressSchema.optional().describe("Derive Chain receiver; defaults to executor")
5741
+ });
5742
+ var mcpDeriveHypeVaultDepositInputSchema = mcpDeriveMultisignInput({
5743
+ amountHuman: zod.z.string().min(1).describe("HYPE amount"),
5744
+ token: evmAddressSchema.optional().describe("Native 0x0 or WHYPE 0x555\u20265"),
5745
+ vault: evmAddressSchema.optional()
5746
+ });
5747
+ var mcpDerivePlaceOrderInputSchema = mcpDeriveMultisignInput({
5748
+ instrumentName: zod.z.string().min(1).describe("e.g. ETH-20260626-3000-C"),
5749
+ direction: zod.z.enum(["buy", "sell"]),
5750
+ amount: zod.z.string().min(1),
5751
+ limitPrice: zod.z.string().min(1),
5752
+ maxFee: zod.z.string().min(1),
5753
+ subaccountId: deriveSubaccountIdField,
5754
+ orderType: zod.z.enum(["limit", "market"]).optional(),
5755
+ timeInForce: zod.z.enum(["gtc", "ioc", "fok", "post_only"]).optional(),
5756
+ reduceOnly: zod.z.boolean().optional(),
5757
+ label: zod.z.string().optional(),
5758
+ ticketKind: zod.z.enum(["limit", "stop_limit", "twap"]).optional(),
5759
+ triggerPrice: zod.z.string().optional().describe("Required for stop_limit"),
5760
+ triggerType: zod.z.enum(["stoploss", "takeprofit"]).optional(),
5761
+ triggerPriceType: zod.z.enum(["mark", "index"]).optional(),
5762
+ algoDurationSec: agentCoercedIntSchema(zod.z.number().int().min(60)).optional().describe("Required for twap"),
5763
+ algoNumSlices: agentCoercedIntSchema(zod.z.number().int().min(2)).optional().describe("Required for twap")
5764
+ });
5765
+ var mcpDeriveReplaceOrderInputSchema = mcpDeriveMultisignInput({
5766
+ instrumentName: zod.z.string().min(1),
5767
+ direction: zod.z.enum(["buy", "sell"]),
5768
+ amount: zod.z.string().min(1),
5769
+ limitPrice: zod.z.string().min(1),
5770
+ maxFee: zod.z.string().min(1),
5771
+ subaccountId: deriveSubaccountIdField,
5772
+ orderType: zod.z.enum(["limit", "market"]).optional(),
5773
+ timeInForce: zod.z.enum(["gtc", "ioc", "fok", "post_only"]).optional(),
5774
+ reduceOnly: zod.z.boolean().optional(),
5775
+ label: zod.z.string().optional(),
5776
+ ticketKind: zod.z.enum(["limit", "stop_limit", "twap"]).optional(),
5777
+ triggerPrice: zod.z.string().optional(),
5778
+ triggerType: zod.z.enum(["stoploss", "takeprofit"]).optional(),
5779
+ triggerPriceType: zod.z.enum(["mark", "index"]).optional(),
5780
+ algoDurationSec: agentCoercedIntSchema(zod.z.number().int().min(60)).optional(),
5781
+ algoNumSlices: agentCoercedIntSchema(zod.z.number().int().min(2)).optional(),
5782
+ orderIdToCancel: zod.z.string().min(1).optional(),
5783
+ nonceToCancel: zod.z.string().min(1).optional()
5784
+ }).refine((d) => Boolean(d.orderIdToCancel) !== Boolean(d.nonceToCancel), {
5785
+ message: "Replace requires exactly one of orderIdToCancel or nonceToCancel."
5786
+ });
5787
+ var mcpDeriveCancelInputSchema = mcpDeriveMultisignInput({
5788
+ instrumentName: zod.z.string().min(1),
5789
+ orderId: zod.z.string().min(1).describe("order_id from ctm_derive_fetch_open_orders"),
5790
+ subaccountId: deriveSubaccountIdField
5791
+ });
5792
+ var mcpDeriveTransferSpotInputSchema = mcpDeriveMultisignInput({
5793
+ fromSubaccountId: deriveSubaccountIdField,
5794
+ toSubaccountId: agentCoercedIntSchema(zod.z.number().int().nonnegative()).describe(
5795
+ "Existing destination, or 0 to create an extra subaccount (requires newSubaccountManager)."
5796
+ ),
5797
+ newSubaccountManager: agentCoercedIntSchema(zod.z.number().int().nonnegative()).describe(
5798
+ "Required when toSubaccountId is 0. Extra subaccounts only \u2014 first account is L1 deposit."
5799
+ ),
5800
+ asset: evmAddressSchema.describe("Protocol asset address"),
5801
+ amount: zod.z.string().min(1),
5802
+ maxFeeUsd: zod.z.string().optional(),
5803
+ subId: agentCoercedIntSchema(zod.z.number().int().nonnegative()).optional()
5804
+ });
5193
5805
  var mcpCctpFeeFieldsSchema = zod.z.object({
5194
5806
  feeTierUsed: zod.z.enum(["low", "med", "high"]),
5195
5807
  maxFee: zod.z.string().describe("Selected tier max fee in USDC base units (6 decimals)"),
@@ -5900,11 +6512,21 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
5900
6512
  actionId: "hyperliquid.limitOrder",
5901
6513
  protocolId: "hyperliquid",
5902
6514
  chainCategory: "evm",
5903
- description: "Create and submit mpc-auth multiSignRequest for a Hyperliquid limit/IoC order. Plain limit: CoreWriter (useCustomGas). When takeProfitTriggerPxHuman and/or stopLossTriggerPxHuman are set: one L1 EIP-712 normalTpsl bracket (entry + TP/SL) to /exchange \u2014 no useCustomGas.",
6515
+ description: "Create and submit mpc-auth multiSignRequest for a Hyperliquid limit/IoC order. Plain limit: CoreWriter (useCustomGas). When takeProfitTriggerPxHuman, stopLossTriggerPxHuman, and/or trailingOffsetHuman are set: L1 EIP-712 to /exchange (normalTpsl for TP/SL; trailingStop is a second signed action) \u2014 no useCustomGas. Trailing cannot combine with a fixed SL. Perp only for trailing.",
5904
6516
  prerequisites: ["keyGenId", "chainId 999 or 998", "coin", "limitPxHuman", "szHuman"],
5905
6517
  handler: { importPath: "protocols/evm/hyperliquid", exportName: "buildEvmMultisignBodyHyperliquidLimitOrderBatch" },
5906
6518
  inputZod: mcpHyperliquidLimitOrderInputSchema
5907
6519
  }),
6520
+ defineProtocolMcpTool({
6521
+ name: "ctm_hyperliquid_build_trailing_stop_multisign",
6522
+ actionId: "hyperliquid.trailingStop",
6523
+ protocolId: "hyperliquid",
6524
+ chainCategory: "evm",
6525
+ description: "Create and submit mpc-auth multiSignRequest for a Hyperliquid perp trailing stop (EIP-712 L1 trailingStop action to /exchange \u2014 no useCustomGas). Retracement is a price distance or percentage; optional activation price delays tracking. Typically reduce-only to close a position. isBuy false closes a long / opens a short.",
6526
+ prerequisites: ["keyGenId", "chainId 999 or 998", "coin", "szHuman", "trailingOffsetHuman"],
6527
+ handler: { importPath: "protocols/evm/hyperliquid", exportName: "buildHyperliquidTrailingStopMultisign" },
6528
+ inputZod: mcpHyperliquidTrailingStopInputSchema
6529
+ }),
5908
6530
  defineProtocolMcpTool({
5909
6531
  name: "ctm_hyperliquid_build_close_multisign",
5910
6532
  actionId: "hyperliquid.close",
@@ -6446,6 +7068,188 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
6446
7068
  prerequisites: ["keyGenId", "chainId", "comet", "steps"],
6447
7069
  handler: { importPath: "protocols/evm/compound-v3", exportName: "buildEvmMultisignBodyCompoundV3Bulker" },
6448
7070
  inputZod: mcpCompoundV3BulkerInputSchema
7071
+ }),
7072
+ defineProtocolMcpTool({
7073
+ name: "ctm_derive_build_deposit_new_subaccount_multisign",
7074
+ actionId: "derive.depositNewSubaccount",
7075
+ protocolId: "derive",
7076
+ chainCategory: "evm",
7077
+ description: "Ethereum L1 only (chainId 1 / 11155111): approve the underlying ERC-20 to ACTION_MANAGER, then depositToNewSubaccount. First credit creates the trading + fallback (manager 0) subaccounts. Arb/OP/Base: ctm_derive_build_socket_deposit_multisign. HyperEVM HYPE: ctm_derive_build_hype_vault_deposit_multisign. useCustomGas.",
7078
+ prerequisites: [
7079
+ "chainId 1 or 11155111",
7080
+ "managerId + protocolAsset + underlyingErc20 from ctm_derive_fetch_risk_universes",
7081
+ "Ethereum L1 collateral (usually USDC)"
7082
+ ],
7083
+ followUp: ["ctm_derive_fetch_pending_deposits", "ctm_derive_fetch_subaccounts"],
7084
+ handler: { importPath: "protocols/evm/derive", exportName: "buildDeriveDepositNewSubaccountMultisign" },
7085
+ inputZod: mcpDeriveDepositNewSubaccountInputSchema
7086
+ }),
7087
+ defineProtocolMcpTool({
7088
+ name: "ctm_derive_build_deposit_address_transfer_multisign",
7089
+ actionId: "derive.depositAddressTransfer",
7090
+ protocolId: "derive",
7091
+ chainCategory: "evm",
7092
+ description: "Ethereum L1 ERC-20 transfer to a registered Derive deposit address (standard / keeper sweep). Call ctm_derive_register_deposit_address first. useCustomGas.",
7093
+ prerequisites: ["chainId 1 or 11155111", "depositAddress from ctm_derive_register_deposit_address"],
7094
+ followUp: ["ctm_derive_fetch_pending_deposits", "ctm_derive_fetch_subaccounts"],
7095
+ handler: { importPath: "protocols/evm/derive", exportName: "buildDeriveDepositAddressTransferMultisign" },
7096
+ inputZod: mcpDeriveDepositAddressTransferInputSchema
7097
+ }),
7098
+ defineProtocolMcpTool({
7099
+ name: "ctm_derive_build_socket_deposit_multisign",
7100
+ actionId: "derive.socketDeposit",
7101
+ protocolId: "derive",
7102
+ chainCategory: "evm",
7103
+ description: "Socket FAST deposit of USDC/WETH/WBTC on Ethereum, Optimism, Base, or Arbitrum. Native 0x0 wraps to WETH. Pays a small native bridge fee. useCustomGas.",
7104
+ prerequisites: ["chainId 1 / 10 / 8453 / 42161", "token + amountHuman"],
7105
+ followUp: ["ctm_derive_fetch_pending_deposits", "ctm_derive_fetch_subaccounts"],
7106
+ handler: { importPath: "protocols/evm/derive", exportName: "buildDeriveSocketDepositMultisign" },
7107
+ inputZod: mcpDeriveSocketDepositInputSchema
7108
+ }),
7109
+ defineProtocolMcpTool({
7110
+ name: "ctm_derive_build_hype_vault_deposit_multisign",
7111
+ actionId: "derive.hypeVaultDeposit",
7112
+ protocolId: "derive",
7113
+ chainCategory: "evm",
7114
+ description: "HyperEVM (999) HYPE vault: wrap native HYPE to WHYPE if needed, approve, deposit. First credit creates a Standard Margin subaccount. useCustomGas.",
7115
+ prerequisites: ["chainId 999", "amountHuman"],
7116
+ followUp: ["ctm_derive_fetch_pending_deposits", "ctm_derive_fetch_subaccounts"],
7117
+ handler: { importPath: "protocols/evm/derive", exportName: "buildDeriveHypeVaultDepositMultisign" },
7118
+ inputZod: mcpDeriveHypeVaultDepositInputSchema
7119
+ }),
7120
+ defineProtocolMcpTool({
7121
+ name: "ctm_derive_build_place_order_multisign",
7122
+ actionId: "derive.placeOrder",
7123
+ protocolId: "derive",
7124
+ chainCategory: "evm",
7125
+ description: "EIP-712 Derive options order (delivery derive_exchange). Requires subaccountId from ctm_derive_fetch_subaccounts. Does not move the current-chain token unless that row funded the account. No useCustomGas.",
7126
+ prerequisites: [
7127
+ "subaccountId from ctm_derive_fetch_subaccounts",
7128
+ "funded Derive collateral (L1 / Socket / HYPE vault)",
7129
+ "instrumentName, direction, amount, limitPrice, maxFee"
7130
+ ],
7131
+ handler: { importPath: "protocols/evm/derive", exportName: "buildDerivePlaceOrderMultisign" },
7132
+ inputZod: mcpDerivePlaceOrderInputSchema
7133
+ }),
7134
+ defineProtocolMcpTool({
7135
+ name: "ctm_derive_build_replace_order_multisign",
7136
+ actionId: "derive.replaceOrder",
7137
+ protocolId: "derive",
7138
+ chainCategory: "evm",
7139
+ description: "EIP-712 replace of a Derive open order. Requires subaccountId from ctm_derive_fetch_subaccounts and exactly one of orderIdToCancel or nonceToCancel. EIP-712 orders do not move the current-chain token.",
7140
+ prerequisites: [
7141
+ "subaccountId from ctm_derive_fetch_subaccounts",
7142
+ "funded Derive collateral (L1 / Socket / HYPE vault)",
7143
+ "orderIdToCancel or nonceToCancel"
7144
+ ],
7145
+ handler: { importPath: "protocols/evm/derive", exportName: "buildDeriveReplaceOrderMultisign" },
7146
+ inputZod: mcpDeriveReplaceOrderInputSchema
7147
+ }),
7148
+ defineProtocolMcpTool({
7149
+ name: "ctm_derive_build_cancel_multisign",
7150
+ actionId: "derive.cancel",
7151
+ protocolId: "derive",
7152
+ chainCategory: "evm",
7153
+ description: "Cancel a Derive open order (v3 private/cancel via EIP-191 login delivery). Requires subaccountId from ctm_derive_fetch_subaccounts. Does not move the current-chain token.",
7154
+ prerequisites: [
7155
+ "subaccountId from ctm_derive_fetch_subaccounts",
7156
+ "orderId from ctm_derive_fetch_open_orders"
7157
+ ],
7158
+ handler: { importPath: "protocols/evm/derive", exportName: "buildDeriveCancelMultisign" },
7159
+ inputZod: mcpDeriveCancelInputSchema
7160
+ }),
7161
+ defineProtocolMcpTool({
7162
+ name: "ctm_derive_build_transfer_spot_multisign",
7163
+ actionId: "derive.transferSpot",
7164
+ protocolId: "derive",
7165
+ chainCategory: "evm",
7166
+ description: "EIP-712 transfer_spot. Use toSubaccountId 0 + newSubaccountManager to create an extra subaccount after the first funded one. First account is a deposit (L1 / Socket / HYPE), not this tool.",
7167
+ prerequisites: [
7168
+ "fromSubaccountId from ctm_derive_fetch_subaccounts",
7169
+ "funded Derive collateral (L1 / Socket / HYPE vault)"
7170
+ ],
7171
+ handler: { importPath: "protocols/evm/derive", exportName: "buildDeriveTransferSpotMultisign" },
7172
+ inputZod: mcpDeriveTransferSpotInputSchema
7173
+ }),
7174
+ defineProtocolMcpTool({
7175
+ name: "ctm_trueo_build_wrap_tyd_multisign",
7176
+ actionId: "trueo.wrap-tyd",
7177
+ protocolId: "trueo",
7178
+ chainCategory: "evm",
7179
+ description: "Mint TYD by depositing Base USDC into the Yearn ERC-4626 vault. Not a market bet. No marketAddress. 30-minute expiry.",
7180
+ prerequisites: ["keyGenId", "chainId 8453", "amountHuman (USDC)"],
7181
+ handler: { importPath: "protocols/evm/trueo", exportName: "buildEvmMultisignBodyTrueoWrapTyd" },
7182
+ inputZod: mcpTrueoWrapTydInputSchema
7183
+ }),
7184
+ defineProtocolMcpTool({
7185
+ name: "ctm_trueo_build_unwrap_tyd_multisign",
7186
+ actionId: "trueo.unwrap-tyd",
7187
+ protocolId: "trueo",
7188
+ chainCategory: "evm",
7189
+ description: "Redeem TYD shares back to Base USDC via the Yearn ERC-4626 vault. Not a market bet. No marketAddress. 30-minute expiry.",
7190
+ prerequisites: ["keyGenId", "chainId 8453", "amountHuman (TYD)"],
7191
+ handler: { importPath: "protocols/evm/trueo", exportName: "buildEvmMultisignBodyTrueoUnwrapTyd" },
7192
+ inputZod: mcpTrueoUnwrapTydInputSchema
7193
+ }),
7194
+ defineProtocolMcpTool({
7195
+ name: "ctm_trueo_build_mint_multisign",
7196
+ actionId: "trueo.mint",
7197
+ protocolId: "trueo",
7198
+ chainCategory: "evm",
7199
+ description: "Mint YES+NO from TYD (default) or USDC via TruthMarketAdapter. Base 8453. Not a bet \u2014 allowed near market close. 30-minute multiSign expiry.",
7200
+ prerequisites: ["keyGenId", "chainId 8453", "marketAddress from ctm_trueo_fetch_market", "amountHuman"],
7201
+ handler: { importPath: "protocols/evm/trueo", exportName: "buildEvmMultisignBodyTrueoMint" },
7202
+ inputZod: mcpTrueoMintInputSchema
7203
+ }),
7204
+ defineProtocolMcpTool({
7205
+ name: "ctm_trueo_build_burn_multisign",
7206
+ actionId: "trueo.burn",
7207
+ protocolId: "trueo",
7208
+ chainCategory: "evm",
7209
+ description: "Burn equal YES+NO back to TYD (or USDC via adapter). Not a bet. 30-minute expiry.",
7210
+ prerequisites: ["keyGenId", "chainId 8453", "marketAddress", "amountHuman"],
7211
+ handler: { importPath: "protocols/evm/trueo", exportName: "buildEvmMultisignBodyTrueoBurn" },
7212
+ inputZod: mcpTrueoBurnInputSchema
7213
+ }),
7214
+ defineProtocolMcpTool({
7215
+ name: "ctm_trueo_build_redeem_multisign",
7216
+ actionId: "trueo.redeem",
7217
+ protocolId: "trueo",
7218
+ chainCategory: "evm",
7219
+ description: "Redeem winning outcome tokens after resolution. Not a bet. 30-minute expiry.",
7220
+ prerequisites: ["keyGenId", "chainId 8453", "marketAddress", "amountHuman"],
7221
+ handler: { importPath: "protocols/evm/trueo", exportName: "buildEvmMultisignBodyTrueoRedeem" },
7222
+ inputZod: mcpTrueoRedeemInputSchema
7223
+ }),
7224
+ defineProtocolMcpTool({
7225
+ name: "ctm_trueo_build_swap_multisign",
7226
+ actionId: "trueo.swap",
7227
+ protocolId: "trueo",
7228
+ chainCategory: "evm",
7229
+ description: "Buy Yes or No with TYD via UniversalRouterAdapter V4 swap. Refuses if the market closes within 5 minutes. extraJSON stores endOfTrading for Get Sig/Execute. 30-minute expiry.",
7230
+ prerequisites: ["keyGenId", "chainId 8453", "marketAddress", "side", "amountHuman"],
7231
+ handler: { importPath: "protocols/evm/trueo", exportName: "buildEvmMultisignBodyTrueoSwap" },
7232
+ inputZod: mcpTrueoSwapInputSchema
7233
+ }),
7234
+ defineProtocolMcpTool({
7235
+ name: "ctm_trueo_build_create_order_multisign",
7236
+ actionId: "trueo.create-order",
7237
+ protocolId: "trueo",
7238
+ chainCategory: "evm",
7239
+ description: "Create an OrderManager limit order (Yes or No). Refuses if the market closes within 5 minutes. 30-minute expiry.",
7240
+ prerequisites: ["keyGenId", "chainId 8453", "marketAddress", "side", "amountHuman", "tickLower", "tickUpper"],
7241
+ handler: { importPath: "protocols/evm/trueo", exportName: "buildEvmMultisignBodyTrueoCreateOrder" },
7242
+ inputZod: mcpTrueoCreateOrderInputSchema
7243
+ }),
7244
+ defineProtocolMcpTool({
7245
+ name: "ctm_trueo_build_cancel_order_multisign",
7246
+ actionId: "trueo.cancel-order",
7247
+ protocolId: "trueo",
7248
+ chainCategory: "evm",
7249
+ description: "Cancel an OrderManager order. Not a bet \u2014 allowed after close. 30-minute expiry.",
7250
+ prerequisites: ["keyGenId", "chainId 8453", "marketAddress", "side", "orderId"],
7251
+ handler: { importPath: "protocols/evm/trueo", exportName: "buildEvmMultisignBodyTrueoCancelOrder" },
7252
+ inputZod: mcpTrueoCancelOrderInputSchema
6449
7253
  })
6450
7254
  ];
6451
7255
 
@@ -8726,6 +9530,310 @@ var CORE_MCP_TOOL_DEFINITIONS = [
8726
9530
  ],
8727
9531
  handler: { importPath: "protocols/evm/pendle", exportName: "buildEvmMultisignBodyPendleRedeemRewardsBatch" },
8728
9532
  inputZod: mcpPendleBuildRedeemRewardsMultisignInputSchema
9533
+ }),
9534
+ defineMcpTool({
9535
+ name: "ctm_derive_fetch_currencies",
9536
+ actionId: "derive.fetch-currencies",
9537
+ protocolId: "derive",
9538
+ chainCategory: "evm",
9539
+ description: "List Derive currencies from public/get_all_currencies. Used to map asset-row symbols (ETH, USDC, BTC, \u2026). load_defi_protocol derive activates defi:derive:market-data.",
9540
+ prerequisites: ["load_defi_protocol derive"],
9541
+ followUp: ["ctm_derive_fetch_option_chain", "ctm_derive_fetch_tickers", "ctm_derive_search_instruments"],
9542
+ handler: { importPath: "protocols/evm/derive", exportName: "deriveFetchCurrenciesSummary" },
9543
+ inputZod: mcpDeriveFetchCurrenciesInputSchema,
9544
+ outputZod: mcpDeriveFetchCurrenciesOutputSchema
9545
+ }),
9546
+ defineMcpTool({
9547
+ name: "ctm_derive_fetch_option_chain",
9548
+ actionId: "derive.fetch-option-chain",
9549
+ protocolId: "derive",
9550
+ chainCategory: "evm",
9551
+ description: "Compact Derive expiry ladder for a currency (counts + min/max strike per YYYYMMDD). Does not dump every instrument. Then ctm_derive_fetch_tickers for that expiry.",
9552
+ prerequisites: ["currency e.g. ETH"],
9553
+ followUp: ["ctm_derive_fetch_tickers", "ctm_derive_search_instruments", "ctm_derive_fetch_market_snapshot"],
9554
+ handler: { importPath: "protocols/evm/derive", exportName: "deriveFetchOptionChainAgentSummary" },
9555
+ inputZod: mcpDeriveFetchOptionChainInputSchema,
9556
+ outputZod: mcpDeriveFetchOptionChainOutputSchema
9557
+ }),
9558
+ defineMcpTool({
9559
+ name: "ctm_derive_fetch_tickers",
9560
+ actionId: "derive.fetch-tickers",
9561
+ protocolId: "derive",
9562
+ chainCategory: "evm",
9563
+ description: 'ATM strike/premium ladder for one Derive expiry (bid/ask/mark). expiryDate is YYYYMMDD \u2014 string or number. Default ~9 strikes around index; pass ladder:"all" for every strike.',
9564
+ prerequisites: ["currency", "expiryDate YYYYMMDD (string or number)"],
9565
+ followUp: ["ctm_derive_fetch_market_snapshot", "ctm_derive_order_quote", "ctm_derive_build_place_order_multisign"],
9566
+ handler: { importPath: "protocols/evm/derive", exportName: "deriveFetchTickersSummary" },
9567
+ inputZod: mcpDeriveFetchTickersInputSchema,
9568
+ outputZod: mcpDeriveFetchTickersOutputSchema
9569
+ }),
9570
+ defineMcpTool({
9571
+ name: "ctm_derive_search_instruments",
9572
+ actionId: "derive.search-instruments",
9573
+ protocolId: "derive",
9574
+ chainCategory: "evm",
9575
+ description: "Search Derive option instrument names by strike, expiry, or C/P suffix.",
9576
+ prerequisites: ["currency", "query"],
9577
+ followUp: ["ctm_derive_fetch_market_snapshot", "ctm_derive_build_place_order_multisign"],
9578
+ handler: { importPath: "protocols/evm/derive", exportName: "deriveSearchInstrumentsSummary" },
9579
+ inputZod: mcpDeriveSearchInstrumentsInputSchema,
9580
+ outputZod: mcpDeriveSearchInstrumentsOutputSchema
9581
+ }),
9582
+ defineMcpTool({
9583
+ name: "ctm_derive_fetch_market_snapshot",
9584
+ actionId: "derive.fetch-market-snapshot",
9585
+ protocolId: "derive",
9586
+ chainCategory: "evm",
9587
+ description: "Live Derive ticker: mark, index, bid/ask, greeks. Throws if no live price.",
9588
+ prerequisites: ["instrumentName from fetch_option_chain"],
9589
+ followUp: ["ctm_derive_fetch_ohlcv", "ctm_derive_order_quote", "ctm_derive_build_place_order_multisign"],
9590
+ handler: { importPath: "protocols/evm/derive", exportName: "deriveFetchMarketSnapshotSummary" },
9591
+ inputZod: mcpDeriveFetchMarketSnapshotInputSchema,
9592
+ outputZod: mcpDeriveFetchMarketSnapshotOutputSchema
9593
+ }),
9594
+ defineMcpTool({
9595
+ name: "ctm_derive_fetch_ohlcv",
9596
+ actionId: "derive.fetch-ohlcv",
9597
+ protocolId: "derive",
9598
+ chainCategory: "evm",
9599
+ description: 'OHLCV for a Derive option (instrumentName) or underlying index (currency + marketKind index). Default is ~96 bars for the interval (not a 14-day dump). Envelope { ohlcv, dataSource: "derive" }. Then continuum__prepare_chart_from_rows if the user wants a chart.',
9600
+ prerequisites: ["instrumentName or currency"],
9601
+ followUp: ["continuum__prepare_chart_from_rows", "ctm_derive_fetch_market_snapshot"],
9602
+ handler: { importPath: "protocols/evm/derive", exportName: "deriveFetchOhlcvSummary" },
9603
+ inputZod: mcpDeriveFetchOhlcvInputSchema,
9604
+ outputZod: mcpDeriveFetchOhlcvOutputSchema
9605
+ }),
9606
+ defineMcpTool({
9607
+ name: "ctm_derive_order_quote",
9608
+ actionId: "derive.order-quote",
9609
+ protocolId: "derive",
9610
+ chainCategory: "evm",
9611
+ description: "Dry-run Derive fill / margin preview (public/order_quote).",
9612
+ prerequisites: ["instrumentName", "direction", "amount", "limitPrice"],
9613
+ followUp: ["ctm_derive_build_place_order_multisign"],
9614
+ handler: { importPath: "protocols/evm/derive", exportName: "deriveOrderQuoteSummary" },
9615
+ inputZod: mcpDeriveOrderQuoteInputSchema,
9616
+ outputZod: mcpDeriveOrderQuoteOutputSchema
9617
+ }),
9618
+ defineMcpTool({
9619
+ name: "ctm_derive_fetch_risk_universes",
9620
+ actionId: "derive.fetch-risk-universes",
9621
+ protocolId: "derive",
9622
+ chainCategory: "evm",
9623
+ description: "List Derive risk universes (manager_id + collaterals). Required before the first deposit. Pick a manager that lists ETH options and USDC (or the row currency).",
9624
+ prerequisites: ["activate_tool_group defi:derive:options"],
9625
+ followUp: [
9626
+ "ctm_derive_build_deposit_new_subaccount_multisign",
9627
+ "ctm_derive_register_deposit_address",
9628
+ "ctm_derive_build_socket_deposit_multisign",
9629
+ "ctm_derive_build_hype_vault_deposit_multisign"
9630
+ ],
9631
+ handler: { importPath: "protocols/evm/derive", exportName: "deriveFetchRiskUniversesSummary" },
9632
+ inputZod: mcpDeriveFetchRiskUniversesInputSchema,
9633
+ outputZod: mcpDeriveFetchRiskUniversesOutputSchema
9634
+ }),
9635
+ defineMcpTool({
9636
+ name: "ctm_derive_fetch_pending_deposits",
9637
+ actionId: "derive.fetch-pending-deposits",
9638
+ protocolId: "derive",
9639
+ chainCategory: "evm",
9640
+ description: "Poll public/get_pending_deposits for the KeyGen wallet. credited:false means wait; then call fetch_subaccounts. First deposit is L1, Socket (ETH/OP/Base/Arb), or HyperEVM HYPE.",
9641
+ prerequisites: ["wallet / executorAddress"],
9642
+ followUp: ["ctm_derive_fetch_subaccounts"],
9643
+ handler: { importPath: "protocols/evm/derive", exportName: "deriveFetchPendingDepositsSummary" },
9644
+ inputZod: mcpDeriveFetchPendingDepositsInputSchema,
9645
+ outputZod: mcpDeriveFetchPendingDepositsOutputSchema
9646
+ }),
9647
+ defineMcpTool({
9648
+ name: "ctm_derive_register_deposit_address",
9649
+ actionId: "derive.register-deposit-address",
9650
+ protocolId: "derive",
9651
+ chainCategory: "evm",
9652
+ description: "public/register_deposit_address \u2014 deterministic Ethereum L1 deposit address for this wallet. Then transfer the token with ctm_derive_build_deposit_address_transfer_multisign. Do not send from Base/Arb to this address.",
9653
+ prerequisites: ["wallet", "managerId (new subaccount) or subaccountId (existing)"],
9654
+ followUp: ["ctm_derive_build_deposit_address_transfer_multisign", "ctm_derive_fetch_pending_deposits"],
9655
+ handler: { importPath: "protocols/evm/derive", exportName: "deriveRegisterDepositAddress" },
9656
+ inputZod: mcpDeriveRegisterDepositAddressInputSchema,
9657
+ outputZod: mcpDeriveRegisterDepositAddressOutputSchema
9658
+ }),
9659
+ defineMcpTool({
9660
+ name: "ctm_derive_fetch_subaccounts",
9661
+ actionId: "derive.fetch-subaccounts",
9662
+ protocolId: "derive",
9663
+ chainCategory: "evm",
9664
+ description: "List Derive subaccount ids for the KeyGen executor. Empty list returns funded:false and notes to deposit from a fundable logo row (L1 / Socket / HYPE vault). Two ids after first credit is normal (trading + fallback manager 0).",
9665
+ prerequisites: ["wallet / executorAddress", "node-cached EIP-191 login"],
9666
+ followUp: ["ctm_derive_fetch_portfolio", "ctm_derive_build_place_order_multisign"],
9667
+ handler: { importPath: "protocols/evm/derive", exportName: "deriveFetchSubaccountsSummary" },
9668
+ inputZod: mcpDeriveFetchSubaccountsInputSchema,
9669
+ outputZod: mcpDeriveFetchSubaccountsOutputSchema
9670
+ }),
9671
+ defineMcpTool({
9672
+ name: "ctm_derive_fetch_portfolio",
9673
+ actionId: "derive.fetch-portfolio",
9674
+ protocolId: "derive",
9675
+ chainCategory: "evm",
9676
+ description: "Derive private/get_subaccount portfolio for a funded subaccountId.",
9677
+ prerequisites: ["subaccountId from ctm_derive_fetch_subaccounts"],
9678
+ followUp: ["ctm_derive_fetch_positions", "ctm_derive_build_place_order_multisign"],
9679
+ handler: { importPath: "protocols/evm/derive", exportName: "deriveFetchPortfolioSummary" },
9680
+ inputZod: mcpDeriveFetchPortfolioInputSchema,
9681
+ outputZod: mcpDeriveFetchPortfolioOutputSchema
9682
+ }),
9683
+ defineMcpTool({
9684
+ name: "ctm_derive_fetch_positions",
9685
+ actionId: "derive.fetch-positions",
9686
+ protocolId: "derive",
9687
+ chainCategory: "evm",
9688
+ description: "Open Derive option positions for a subaccountId from fetch_subaccounts.",
9689
+ prerequisites: ["subaccountId from ctm_derive_fetch_subaccounts"],
9690
+ followUp: ["ctm_derive_build_place_order_multisign"],
9691
+ handler: { importPath: "protocols/evm/derive", exportName: "deriveFetchPositionsSummary" },
9692
+ inputZod: mcpDeriveFetchPositionsInputSchema,
9693
+ outputZod: mcpDeriveFetchPositionsOutputSchema
9694
+ }),
9695
+ defineMcpTool({
9696
+ name: "ctm_derive_fetch_open_orders",
9697
+ actionId: "derive.fetch-open-orders",
9698
+ protocolId: "derive",
9699
+ chainCategory: "evm",
9700
+ description: "Open Derive orders for a subaccountId. Follow with cancel/replace.",
9701
+ prerequisites: ["subaccountId from ctm_derive_fetch_subaccounts"],
9702
+ followUp: ["ctm_derive_build_cancel_multisign", "ctm_derive_build_replace_order_multisign"],
9703
+ handler: { importPath: "protocols/evm/derive", exportName: "deriveFetchOpenOrdersSummary" },
9704
+ inputZod: mcpDeriveFetchOpenOrdersInputSchema,
9705
+ outputZod: mcpDeriveFetchOpenOrdersOutputSchema
9706
+ }),
9707
+ defineMcpTool({
9708
+ name: "search_prediction_markets",
9709
+ actionId: "prediction-markets.search",
9710
+ protocolId: "prediction-markets",
9711
+ chainCategory: "evm",
9712
+ description: 'Venue-agnostic prediction market search for MPA chat. v1 adapter is Trueo on Base. Pass the operator topic verbatim as query (case-insensitive title substring). Do not substitute a category or synonym. Do not set trending when query is set. Empty query lists trending (max 10; cannot page). If hasMore, call again with offset/nextOffset, trending=false, indexBase=nextIndexBase, excludeAddresses of listed venueMarketIds. Default: live and recently finished (14 days) \u2014 do not pass includeAll unless the operator asked for closed or historical markets. If the live board is empty, say so. After a pick, get_prediction_market. Writes (mint / limit / burn / redeem / Yes-No swap) are not in the opening catalog \u2014 load_defi_protocol({ protocolId: "trueo" }) then get_defi_protocol_skill or search_continuum_tools for ctm_trueo_build_*.',
9713
+ prerequisites: [],
9714
+ followUp: ["get_prediction_market", "load_defi_protocol", "get_defi_protocol_skill"],
9715
+ handler: { importPath: "protocols/evm/trueo", exportName: "searchPredictionMarketsSummary" },
9716
+ inputZod: mcpSearchPredictionMarketsInputSchema,
9717
+ outputZod: mcpSearchPredictionMarketsOutputSchema
9718
+ }),
9719
+ defineMcpTool({
9720
+ name: "get_prediction_market",
9721
+ actionId: "prediction-markets.get",
9722
+ protocolId: "prediction-markets",
9723
+ chainCategory: "evm",
9724
+ description: 'Full selected prediction market (rules, Yes/No, volume, TVL, expiry). Use after search_prediction_markets pick #N. Does not require load_defi_protocol. Writes stay behind load_defi_protocol({ protocolId: "trueo" }): ctm_trueo_build_wrap_tyd_multisign, ctm_trueo_build_unwrap_tyd_multisign, ctm_trueo_build_mint_multisign, ctm_trueo_build_create_order_multisign, ctm_trueo_build_burn_multisign, ctm_trueo_build_redeem_multisign, ctm_trueo_build_swap_multisign. Discover via get_defi_protocol_skill or search_continuum_tools \u2014 they are not on the opening chat catalog.',
9725
+ prerequisites: ["venueMarketId from search_prediction_markets"],
9726
+ followUp: [
9727
+ "load_defi_protocol",
9728
+ "get_defi_protocol_skill",
9729
+ "ctm_trueo_build_wrap_tyd_multisign",
9730
+ "ctm_trueo_build_mint_multisign",
9731
+ "ctm_trueo_build_create_order_multisign",
9732
+ "ctm_trueo_build_swap_multisign",
9733
+ "ctm_trueo_build_burn_multisign",
9734
+ "ctm_trueo_build_redeem_multisign"
9735
+ ],
9736
+ handler: { importPath: "protocols/evm/trueo", exportName: "getPredictionMarketSummary" },
9737
+ inputZod: mcpGetPredictionMarketInputSchema,
9738
+ outputZod: mcpGetPredictionMarketOutputSchema
9739
+ }),
9740
+ defineMcpTool({
9741
+ name: "list_my_prediction_markets",
9742
+ actionId: "prediction-markets.my-holdings",
9743
+ protocolId: "prediction-markets",
9744
+ chainCategory: "evm",
9745
+ description: "Live Yes/No, trading window, and resolution for markets the user has bet on. Pass YES/NO tokenAddresses from get_token_registry and/or marketAddresses from prior bets. Does not require load_defi_protocol. After a bet, add_to_token_registry for the YES or NO token so it shows here. Exit: load_defi_protocol trueo then ctm_trueo_build_burn_multisign or ctm_trueo_build_redeem_multisign.",
9746
+ prerequisites: [],
9747
+ followUp: [
9748
+ "get_prediction_market",
9749
+ "add_to_token_registry",
9750
+ "load_defi_protocol",
9751
+ "ctm_trueo_build_burn_multisign",
9752
+ "ctm_trueo_build_redeem_multisign"
9753
+ ],
9754
+ handler: { importPath: "protocols/evm/trueo", exportName: "listMyPredictionMarketsSummary" },
9755
+ inputZod: mcpListMyPredictionMarketsInputSchema,
9756
+ outputZod: mcpListMyPredictionMarketsOutputSchema
9757
+ }),
9758
+ defineMcpTool({
9759
+ name: "ctm_trueo_fetch_categories",
9760
+ actionId: "trueo.fetch-categories",
9761
+ protocolId: "trueo",
9762
+ chainCategory: "evm",
9763
+ description: "Trueo category chips (Politics, Crypto, Sports, \u2026). Use as category on search.",
9764
+ prerequisites: ["load_defi_protocol trueo"],
9765
+ followUp: ["ctm_trueo_search_markets", "ctm_trueo_fetch_trending"],
9766
+ handler: { importPath: "protocols/evm/trueo", exportName: "trueoFetchCategoriesSummary" },
9767
+ inputZod: mcpTrueoFetchCategoriesInputSchema,
9768
+ outputZod: mcpTrueoFetchCategoriesOutputSchema
9769
+ }),
9770
+ defineMcpTool({
9771
+ name: "ctm_trueo_fetch_trending",
9772
+ actionId: "trueo.fetch-trending",
9773
+ protocolId: "trueo",
9774
+ chainCategory: "evm",
9775
+ description: "Trueo trending on Base (max 10; API does not page). More markets: ctm_trueo_search_markets with offset=0. Default: live and recently finished (14 days).",
9776
+ prerequisites: ["load_defi_protocol trueo"],
9777
+ followUp: ["ctm_trueo_fetch_market"],
9778
+ handler: { importPath: "protocols/evm/trueo", exportName: "trueoFetchTrendingSummary" },
9779
+ inputZod: mcpTrueoFetchTrendingInputSchema,
9780
+ outputZod: mcpTrueoFetchTrendingOutputSchema
9781
+ }),
9782
+ defineMcpTool({
9783
+ name: "ctm_trueo_search_markets",
9784
+ actionId: "trueo.search-markets",
9785
+ protocolId: "trueo",
9786
+ chainCategory: "evm",
9787
+ description: "Trueo-only search (query + category), pages of 10. Same rows as search_prediction_markets. If hasMore, pass nextOffset and excludeAddresses of listed addresses. Default: live and recently finished (14 days).",
9788
+ prerequisites: ["load_defi_protocol trueo"],
9789
+ followUp: ["ctm_trueo_fetch_market"],
9790
+ handler: { importPath: "protocols/evm/trueo", exportName: "trueoSearchMarketsSummary" },
9791
+ inputZod: mcpTrueoSearchMarketsInputSchema,
9792
+ outputZod: mcpTrueoSearchMarketsOutputSchema
9793
+ }),
9794
+ defineMcpTool({
9795
+ name: "ctm_trueo_fetch_market",
9796
+ actionId: "trueo.fetch-market",
9797
+ protocolId: "trueo",
9798
+ chainCategory: "evm",
9799
+ description: "Selected Trueo market: rules, source, Yes/No %, TVL, size, tokens, pools, endOfTrading. Copy address for build_*. Writes: ctm_trueo_build_mint_multisign, ctm_trueo_build_create_order_multisign, ctm_trueo_build_swap_multisign, ctm_trueo_build_burn_multisign, ctm_trueo_build_redeem_multisign (after load_defi_protocol trueo).",
9800
+ prerequisites: ["marketAddress from search or trending"],
9801
+ followUp: [
9802
+ "ctm_trueo_fetch_chance_series",
9803
+ "ctm_trueo_fetch_orderbook",
9804
+ "ctm_trueo_build_mint_multisign",
9805
+ "ctm_trueo_build_create_order_multisign",
9806
+ "ctm_trueo_build_swap_multisign",
9807
+ "ctm_trueo_build_burn_multisign",
9808
+ "ctm_trueo_build_redeem_multisign"
9809
+ ],
9810
+ handler: { importPath: "protocols/evm/trueo", exportName: "trueoFetchMarketSummary" },
9811
+ inputZod: mcpTrueoFetchMarketInputSchema,
9812
+ outputZod: mcpTrueoFetchMarketOutputSchema
9813
+ }),
9814
+ defineMcpTool({
9815
+ name: "ctm_trueo_fetch_chance_series",
9816
+ actionId: "trueo.fetch-chance-series",
9817
+ protocolId: "trueo",
9818
+ chainCategory: "evm",
9819
+ description: "Yes/No chance samples for a pool id from fetch_market. Not candlesticks. Default hourly (3600s) over 14 days. 1H/1D/1W/All coerce to hourly.",
9820
+ prerequisites: ["poolId from ctm_trueo_fetch_market"],
9821
+ followUp: ["ctm_trueo_build_swap_multisign"],
9822
+ handler: { importPath: "protocols/evm/trueo", exportName: "trueoFetchChanceSeriesSummary" },
9823
+ inputZod: mcpTrueoFetchChanceSeriesInputSchema,
9824
+ outputZod: mcpTrueoFetchChanceSeriesOutputSchema
9825
+ }),
9826
+ defineMcpTool({
9827
+ name: "ctm_trueo_fetch_orderbook",
9828
+ actionId: "trueo.fetch-orderbook",
9829
+ protocolId: "trueo",
9830
+ chainCategory: "evm",
9831
+ description: "Yes/No depth: live tick, implied price, OrderManager pending rows when rpcUrl is set, recent trades.",
9832
+ prerequisites: ["marketAddress from ctm_trueo_fetch_market"],
9833
+ followUp: ["ctm_trueo_build_swap_multisign", "ctm_trueo_build_create_order_multisign"],
9834
+ handler: { importPath: "protocols/evm/trueo", exportName: "trueoFetchOrderbookSummary" },
9835
+ inputZod: mcpTrueoFetchOrderbookInputSchema,
9836
+ outputZod: mcpTrueoFetchOrderbookOutputSchema
8729
9837
  })
8730
9838
  ];
8731
9839
  var MCP_TOOL_DEFINITIONS = [
@@ -9619,7 +10727,26 @@ var hyperliquidProtocolModule = {
9619
10727
  dex: { type: "string", required: false, description: "HIP-3 dex name when applicable" },
9620
10728
  takeProfitTriggerPxHuman: { type: "string", required: false, description: "TP trigger \u2014 enables L1 bracket with SL" },
9621
10729
  stopLossTriggerPxHuman: { type: "string", required: false, description: "SL trigger \u2014 enables L1 bracket with TP" },
9622
- tpslExecMode: { type: "string", required: false, description: "limit_at_trigger (default) or market" }
10730
+ tpslExecMode: { type: "string", required: false, description: "limit_at_trigger (default) or market" },
10731
+ trailingOffsetHuman: { type: "string", required: false, description: "Trailing retracement \u2014 EIP-712 trailingStop (cannot combine with SL)" },
10732
+ trailingOffsetType: { type: "string", required: false, description: "price or percentage" },
10733
+ trailingActivationPxHuman: { type: "string", required: false, description: "Optional activation mark price" }
10734
+ }
10735
+ },
10736
+ {
10737
+ id: "hyperliquid.trailingStop",
10738
+ protocolId: HYPERLIQUID_PROTOCOL_ID,
10739
+ chainCategory: "evm",
10740
+ description: "Place a Hyperliquid perp trailing stop via L1 trailingStop action (EIP-712 /exchange)",
10741
+ commonParams: ["keyGen", "purposeText"],
10742
+ params: {
10743
+ coin: { type: "string", required: true, description: "Perp coin" },
10744
+ isBuy: { type: "boolean", required: true, description: "false closes a long / opens a short" },
10745
+ szHuman: { type: "string", required: true, description: "Size in coin units" },
10746
+ trailingOffsetHuman: { type: "string", required: true, description: "Retracement distance or percent" },
10747
+ trailingOffsetType: { type: "string", required: false, description: "price or percentage (default)" },
10748
+ trailingActivationPxHuman: { type: "string", required: false, description: "Optional activation mark price" },
10749
+ reduceOnly: { type: "boolean", required: false, description: "true (default) reduces a position" }
9623
10750
  }
9624
10751
  },
9625
10752
  {
@@ -11616,6 +12743,400 @@ var pendleProtocolModule = {
11616
12743
  ]
11617
12744
  };
11618
12745
  registerProtocolModule(pendleProtocolModule);
12746
+
12747
+ // src/protocols/evm/derive/constants.ts
12748
+ var DERIVE_PROTOCOL_ID = "derive";
12749
+ var DERIVE_MAINNET_API = "https://api.derive.xyz/v3";
12750
+ var DERIVE_TESTNET_API = "https://testnet.api.derive.xyz/v3";
12751
+ var DERIVE_MAINNET_API_V2 = "https://api.lyra.finance";
12752
+ var DERIVE_TESTNET_API_V2 = "https://api-demo.lyra.finance";
12753
+ function deriveNetworkFromChainId(chainId) {
12754
+ return chainId === 11155111 ? "testnet" : "mainnet";
12755
+ }
12756
+ function deriveApiBaseUrl(network = "mainnet") {
12757
+ return network === "testnet" ? DERIVE_TESTNET_API : DERIVE_MAINNET_API;
12758
+ }
12759
+ function deriveApiFallbackBaseUrl(network = "mainnet") {
12760
+ return network === "testnet" ? DERIVE_TESTNET_API_V2 : DERIVE_MAINNET_API_V2;
12761
+ }
12762
+ var DERIVE_ASSET_ROW_CHAIN_IDS = [1, 10, 8453, 42161, 999, 11155111];
12763
+ function isDeriveAssetRowChainId(chainId) {
12764
+ return DERIVE_ASSET_ROW_CHAIN_IDS.includes(chainId);
12765
+ }
12766
+ function isDeriveChainSupported(chainId) {
12767
+ return isDeriveAssetRowChainId(chainId);
12768
+ }
12769
+ var NATIVE_ZERO = "0x0000000000000000000000000000000000000000";
12770
+ var USDC = {
12771
+ 1: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
12772
+ 10: "0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85",
12773
+ 8453: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
12774
+ 42161: "0xaf88d065e77c8cC2239327C5EDb3A432268e5831",
12775
+ 11155111: "0x73Efab09362052D26FB93A730Be4F8a5EdC833af"
12776
+ };
12777
+ var WETH = {
12778
+ 1: "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",
12779
+ 10: "0x4200000000000000000000000000000000000006",
12780
+ 8453: "0x4200000000000000000000000000000000000006",
12781
+ 42161: "0x82aF49447D8a07e3bd95BD0d56f35241523fBab1"
12782
+ };
12783
+ var WBTC = {
12784
+ 1: "0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599",
12785
+ 10: "0x68f180fcCe6836688e9084f035309E29Bf0A2095",
12786
+ 42161: "0x2f2a2543B76A4166549B7eCDcE5542a773Aa44fB"
12787
+ };
12788
+ var WHYPE = "0x5555555555555555555555555555555555555555";
12789
+ function deriveMappedTokensForChain(chainId) {
12790
+ const tokens = [];
12791
+ const add = (address, symbol, decimals, roles) => {
12792
+ if (!address) return;
12793
+ tokens.push({ address: viem.getAddress(address), symbol, decimals, roles });
12794
+ };
12795
+ if ([1, 10, 8453, 42161].includes(chainId)) {
12796
+ add(NATIVE_ZERO, "ETH", 18, ["native", "underlying"]);
12797
+ add(WETH[chainId], "WETH", 18, ["native_wrapped", "underlying"]);
12798
+ }
12799
+ if (chainId === 999) {
12800
+ add(NATIVE_ZERO, "HYPE", 18, ["native", "collateral"]);
12801
+ add(WHYPE, "WHYPE", 18, ["native_wrapped", "collateral"]);
12802
+ }
12803
+ add(USDC[chainId], "USDC", 6, ["collateral", "quote"]);
12804
+ add(WBTC[chainId], "WBTC", 8, ["underlying", "collateral"]);
12805
+ return tokens;
12806
+ }
12807
+ function deriveNativeWrappedForChain(chainId) {
12808
+ if (chainId === 999) return WHYPE;
12809
+ return WETH[chainId];
12810
+ }
12811
+ function deriveAdvisorNotes() {
12812
+ return "Fund from Ethereum USDC/WETH/WBTC (L1 ACTION_MANAGER or deposit address), Socket USDC/WETH/WBTC on Optimism/Base/Arbitrum, or HyperEVM HYPE (vault). Derive Chain 957 is not a Continuum Assets chain. After credit, EIP-712 options use Derive collateral.";
12813
+ }
12814
+
12815
+ // src/protocols/evm/derive/api.ts
12816
+ function methodName(method) {
12817
+ return method.replace(/^\//, "");
12818
+ }
12819
+ function isDerivePublicMethod(method) {
12820
+ return methodName(method).startsWith("public/");
12821
+ }
12822
+ function isEmptyDerivePublicResult(method, result) {
12823
+ const m = methodName(method);
12824
+ if (result == null) return true;
12825
+ if (m === "public/get_all_currencies" && Array.isArray(result) && result.length === 0) return true;
12826
+ if (m === "public/get_tickers" && result && typeof result === "object") {
12827
+ const tickers = result.tickers;
12828
+ if (Array.isArray(tickers) && tickers.length === 0) return true;
12829
+ if (tickers && typeof tickers === "object" && !Array.isArray(tickers) && Object.keys(tickers).length === 0) {
12830
+ return true;
12831
+ }
12832
+ }
12833
+ return false;
12834
+ }
12835
+ function isDeriveRecoverablePublicError(err) {
12836
+ const name = err instanceof Error ? err.name : "";
12837
+ const msg = err instanceof Error ? err.message : String(err);
12838
+ return name === "TimeoutError" || name === "AbortError" || /Internal error|HTTP 404|Not Found|returned empty|empty catalog|Ticker not found|aborted due to timeout|The operation was aborted/i.test(
12839
+ msg
12840
+ );
12841
+ }
12842
+ function unwrapResult(json, method) {
12843
+ if (json && typeof json === "object") {
12844
+ const rec = json;
12845
+ if (rec.error) {
12846
+ const err = rec.error;
12847
+ const detail = err.data != null && String(err.data).trim() ? ` (${String(err.data).slice(0, 160)})` : "";
12848
+ throw new Error(`Derive ${method} failed: ${err.message ?? JSON.stringify(rec.error)}${detail}`);
12849
+ }
12850
+ if ("result" in rec) return rec.result;
12851
+ }
12852
+ return json;
12853
+ }
12854
+ async function deriveRpcPost(args) {
12855
+ const method = methodName(args.method);
12856
+ const headers = { "Content-Type": "application/json" };
12857
+ if (args.auth) {
12858
+ headers["X-DeriveWallet"] = args.auth.wallet;
12859
+ headers["X-DeriveTimestamp"] = args.auth.timestamp;
12860
+ headers["X-DeriveSignature"] = args.auth.signature;
12861
+ }
12862
+ const res = await fetch(`${args.base}/${method}`, {
12863
+ method: "POST",
12864
+ headers,
12865
+ body: JSON.stringify(args.params ?? {}),
12866
+ cache: "no-store",
12867
+ signal: AbortSignal.timeout(15e3)
12868
+ });
12869
+ const text = await res.text().catch(() => "");
12870
+ if (!res.ok || !text.trim() || text.trim() === "Not Found") {
12871
+ throw new Error(`Derive ${method} HTTP ${res.status}: ${text.slice(0, 240) || "empty body"}`);
12872
+ }
12873
+ let json;
12874
+ try {
12875
+ json = JSON.parse(text);
12876
+ } catch {
12877
+ throw new Error(`Derive ${method} returned non-JSON: ${text.slice(0, 160)}`);
12878
+ }
12879
+ const result = unwrapResult(json, method);
12880
+ if (isEmptyDerivePublicResult(method, result)) {
12881
+ throw new Error(`Derive ${method} returned empty catalog`);
12882
+ }
12883
+ return result;
12884
+ }
12885
+ async function deriveRpc(args) {
12886
+ const network = args.network ?? "mainnet";
12887
+ const method = methodName(args.method);
12888
+ const primary = deriveApiBaseUrl(network);
12889
+ try {
12890
+ return await deriveRpcPost({
12891
+ base: primary,
12892
+ method,
12893
+ params: args.params,
12894
+ auth: args.auth
12895
+ });
12896
+ } catch (err) {
12897
+ const fallback = deriveApiFallbackBaseUrl(network);
12898
+ if (!isDerivePublicMethod(method) || fallback === primary || !isDeriveRecoverablePublicError(err)) {
12899
+ throw err;
12900
+ }
12901
+ return await deriveRpcPost({
12902
+ base: fallback,
12903
+ method,
12904
+ params: args.params,
12905
+ auth: args.auth
12906
+ });
12907
+ }
12908
+ }
12909
+
12910
+ // src/protocols/evm/derive/assets.ts
12911
+ async function deriveFetchCurrenciesRaw(args) {
12912
+ const result = await deriveRpc({
12913
+ method: "public/get_all_currencies",
12914
+ network: args?.network
12915
+ });
12916
+ if (Array.isArray(result)) return result;
12917
+ if (result && typeof result === "object" && Array.isArray(result.currencies)) {
12918
+ return result.currencies;
12919
+ }
12920
+ return [];
12921
+ }
12922
+
12923
+ // src/protocols/evm/derive/index.ts
12924
+ var deriveProtocolModule = {
12925
+ id: DERIVE_PROTOCOL_ID,
12926
+ chainCategory: "evm",
12927
+ isChainSupported(ctx) {
12928
+ if (ctx.chainCategory !== "evm") return false;
12929
+ const chainId = typeof ctx.chainId === "number" ? ctx.chainId : Number(ctx.chainId);
12930
+ return Number.isFinite(chainId) && isDeriveChainSupported(chainId);
12931
+ },
12932
+ isTokenSupported(token) {
12933
+ if (token.category !== "evm") return false;
12934
+ return token.kind === "erc20" || token.kind === "native";
12935
+ },
12936
+ actions: [
12937
+ {
12938
+ id: "derive.depositNewSubaccount",
12939
+ protocolId: DERIVE_PROTOCOL_ID,
12940
+ chainCategory: "evm",
12941
+ description: "Ethereum L1 approve + ACTION_MANAGER.depositToNewSubaccount. First credit creates the trading + fallback subaccounts. chainId 1 / 11155111. Arb/OP/Base use derive.socketDeposit; HyperEVM HYPE uses derive.hypeVaultDeposit.",
12942
+ commonParams: ["keyGen", "purposeText", "useCustomGas"],
12943
+ params: {
12944
+ protocolAsset: { type: "string", required: true, description: "Risk-universe collateral protocol asset" },
12945
+ underlyingErc20: { type: "string", required: true, description: "L1 ERC-20 to approve (usually USDC)" },
12946
+ amountHuman: { type: "string", required: true, description: "Deposit amount in underlying decimals" },
12947
+ managerId: { type: "number", required: true, description: "Risk-universe manager_id" }
12948
+ }
12949
+ },
12950
+ {
12951
+ id: "derive.depositAddressTransfer",
12952
+ protocolId: DERIVE_PROTOCOL_ID,
12953
+ chainCategory: "evm",
12954
+ description: "Ethereum L1 ERC-20 transfer to a registered Derive deposit address (standard / keeper sweep). Call register_deposit_address first.",
12955
+ commonParams: ["keyGen", "purposeText", "useCustomGas"],
12956
+ params: {
12957
+ underlyingErc20: { type: "string", required: true, description: "L1 ERC-20 to send (usually USDC)" },
12958
+ amountHuman: { type: "string", required: true, description: "Transfer amount in token units" },
12959
+ depositAddress: { type: "string", required: true, description: "From register_deposit_address" }
12960
+ }
12961
+ },
12962
+ {
12963
+ id: "derive.socketDeposit",
12964
+ protocolId: DERIVE_PROTOCOL_ID,
12965
+ chainCategory: "evm",
12966
+ description: "Socket FAST deposit of USDC/WETH/WBTC on Ethereum, Optimism, Base, or Arbitrum into Derive Chain. Native ETH wraps to WETH first. useCustomGas.",
12967
+ commonParams: ["keyGen", "purposeText", "useCustomGas"],
12968
+ params: {
12969
+ token: { type: "string", required: true, description: "Row ERC-20 or native 0x0 (wraps to WETH)" },
12970
+ amountHuman: { type: "string", required: true, description: "Deposit amount in token units" }
12971
+ }
12972
+ },
12973
+ {
12974
+ id: "derive.hypeVaultDeposit",
12975
+ protocolId: DERIVE_PROTOCOL_ID,
12976
+ chainCategory: "evm",
12977
+ description: "HyperEVM (999): wrap native HYPE to WHYPE if needed, approve Derive vault, deposit.",
12978
+ commonParams: ["keyGen", "purposeText", "useCustomGas"],
12979
+ params: {
12980
+ amountHuman: { type: "string", required: true, description: "HYPE amount" },
12981
+ token: { type: "string", required: false, description: "Native 0x0 or WHYPE" }
12982
+ }
12983
+ },
12984
+ {
12985
+ id: "derive.placeOrder",
12986
+ protocolId: DERIVE_PROTOCOL_ID,
12987
+ chainCategory: "evm",
12988
+ description: "Place a Derive options limit order via EIP-712 Action (delivery derive_exchange). Does not spend the current-chain token.",
12989
+ commonParams: ["keyGen", "purposeText"],
12990
+ params: {
12991
+ instrumentName: { type: "string", required: true, description: "e.g. ETH-20260626-3000-C" },
12992
+ direction: { type: "string", required: true, description: "buy or sell" },
12993
+ amount: { type: "string", required: true, description: "Contract size" },
12994
+ limitPrice: { type: "string", required: true, description: "Limit price" },
12995
+ maxFee: { type: "string", required: true, description: "Max fee (e18-scaled, \u226412 decimals)" },
12996
+ subaccountId: { type: "number", required: true, description: "From fetch_subaccounts \u2014 never 0" }
12997
+ }
12998
+ },
12999
+ {
13000
+ id: "derive.replaceOrder",
13001
+ protocolId: DERIVE_PROTOCOL_ID,
13002
+ chainCategory: "evm",
13003
+ description: "Replace a Derive open order (EIP-712 Action + orderIdToCancel or nonceToCancel).",
13004
+ commonParams: ["keyGen", "purposeText"],
13005
+ params: {
13006
+ instrumentName: { type: "string", required: true, description: "Instrument of the replacement order" },
13007
+ direction: { type: "string", required: true, description: "buy or sell" },
13008
+ amount: { type: "string", required: true, description: "Contract size" },
13009
+ limitPrice: { type: "string", required: true, description: "Limit price" },
13010
+ maxFee: { type: "string", required: true, description: "Max fee" },
13011
+ subaccountId: { type: "number", required: true, description: "From fetch_subaccounts" },
13012
+ orderIdToCancel: { type: "string", required: false, description: "Existing order id (xor nonceToCancel)" },
13013
+ nonceToCancel: { type: "string", required: false, description: "Existing order nonce (xor orderIdToCancel)" }
13014
+ }
13015
+ },
13016
+ {
13017
+ id: "derive.cancel",
13018
+ protocolId: DERIVE_PROTOCOL_ID,
13019
+ chainCategory: "evm",
13020
+ description: "Cancel a Derive open order. v3 cancel is session-auth; this signs EIP-191 login for private/cancel delivery.",
13021
+ commonParams: ["keyGen", "purposeText"],
13022
+ params: {
13023
+ instrumentName: { type: "string", required: true, description: "Instrument of the open order" },
13024
+ orderId: { type: "string", required: true, description: "order_id from fetch_open_orders" },
13025
+ subaccountId: { type: "number", required: true, description: "From fetch_subaccounts" }
13026
+ }
13027
+ },
13028
+ {
13029
+ id: "derive.transferSpot",
13030
+ protocolId: DERIVE_PROTOCOL_ID,
13031
+ chainCategory: "evm",
13032
+ description: "EIP-712 transfer_spot. Use toSubaccountId 0 + newSubaccountManager to create an extra subaccount after the first funded one.",
13033
+ commonParams: ["keyGen", "purposeText"],
13034
+ params: {
13035
+ fromSubaccountId: { type: "number", required: true, description: "Funded source subaccount" },
13036
+ toSubaccountId: { type: "number", required: true, description: "0 to create an extra subaccount" },
13037
+ newSubaccountManager: { type: "number", required: true, description: "Required when toSubaccountId is 0" },
13038
+ asset: { type: "string", required: true, description: "Protocol asset address" },
13039
+ amount: { type: "string", required: true, description: "Transfer amount" }
13040
+ }
13041
+ }
13042
+ ]
13043
+ };
13044
+ registerProtocolModule(deriveProtocolModule);
13045
+ var TRUEO_PROTOCOL_ID = "trueo";
13046
+ var TRUEO_BASE_CHAIN_ID = 8453;
13047
+ var TRUEO_CHAIN_IDS = [TRUEO_BASE_CHAIN_ID];
13048
+ var TRUEO_TYD = viem.getAddress("0xb13CF163d916917d9cD6E836905cA5f12a1dEF4B");
13049
+ var TRUEO_TRUE = viem.getAddress("0x21CFCFc3d8F98fC728f48341D10Ad8283F6EB7AB");
13050
+ var TRUEO_USDC = viem.getAddress("0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913");
13051
+ viem.getAddress("0x61A98Bef11867c69489B91f340fE545eEfc695d7");
13052
+ viem.getAddress("0x1cdB1C43eB64e99780EA9d3C7162C23432C59a1A");
13053
+ viem.getAddress("0x0A1AFc2121B4441127a02DEF72928F61f564034a");
13054
+ viem.getAddress("0x6E08d24AEf78F6d1a97503F64E84fDF65f8125E1");
13055
+ viem.getAddress("0x3E83479B2276EcFb7C7181F67b5d092d3511e0C4");
13056
+ viem.getAddress("0x000000000022D473030F116dDEE9F6B43aC78BA3");
13057
+ function isTrueoChainSupported(chainId) {
13058
+ return TRUEO_CHAIN_IDS.includes(chainId);
13059
+ }
13060
+
13061
+ // src/protocols/evm/trueo/index.ts
13062
+ var trueoProtocolModule = {
13063
+ id: TRUEO_PROTOCOL_ID,
13064
+ chainCategory: "evm",
13065
+ isChainSupported(ctx) {
13066
+ const id = typeof ctx.chainId === "string" ? Number(ctx.chainId) : ctx.chainId;
13067
+ return ctx.chainCategory === "evm" && isTrueoChainSupported(id);
13068
+ },
13069
+ isTokenSupported(token) {
13070
+ return token.category === "evm" && (token.kind === "erc20" || token.kind === "ctmerc20");
13071
+ },
13072
+ actions: [
13073
+ {
13074
+ id: "trueo.wrap-tyd",
13075
+ protocolId: TRUEO_PROTOCOL_ID,
13076
+ chainCategory: "evm",
13077
+ description: "Mint TYD by depositing Base USDC into the Yearn ERC-4626 vault",
13078
+ commonParams: ["keyGen", "purposeText", "useCustomGas"],
13079
+ params: {}
13080
+ },
13081
+ {
13082
+ id: "trueo.unwrap-tyd",
13083
+ protocolId: TRUEO_PROTOCOL_ID,
13084
+ chainCategory: "evm",
13085
+ description: "Redeem TYD shares back to Base USDC",
13086
+ commonParams: ["keyGen", "purposeText", "useCustomGas"],
13087
+ params: {}
13088
+ },
13089
+ {
13090
+ id: "trueo.mint",
13091
+ protocolId: TRUEO_PROTOCOL_ID,
13092
+ chainCategory: "evm",
13093
+ description: "Mint YES+NO from TYD (or USDC via adapter)",
13094
+ commonParams: ["keyGen", "purposeText", "useCustomGas"],
13095
+ params: {}
13096
+ },
13097
+ {
13098
+ id: "trueo.burn",
13099
+ protocolId: TRUEO_PROTOCOL_ID,
13100
+ chainCategory: "evm",
13101
+ description: "Burn equal YES+NO back to TYD",
13102
+ commonParams: ["keyGen", "purposeText", "useCustomGas"],
13103
+ params: {}
13104
+ },
13105
+ {
13106
+ id: "trueo.redeem",
13107
+ protocolId: TRUEO_PROTOCOL_ID,
13108
+ chainCategory: "evm",
13109
+ description: "Redeem winning outcome tokens after resolution",
13110
+ commonParams: ["keyGen", "purposeText", "useCustomGas"],
13111
+ params: {}
13112
+ },
13113
+ {
13114
+ id: "trueo.swap",
13115
+ protocolId: TRUEO_PROTOCOL_ID,
13116
+ chainCategory: "evm",
13117
+ description: "Buy Yes or No with TYD via UniversalRouterAdapter V4 swap",
13118
+ commonParams: ["keyGen", "purposeText", "useCustomGas"],
13119
+ params: {}
13120
+ },
13121
+ {
13122
+ id: "trueo.create-order",
13123
+ protocolId: TRUEO_PROTOCOL_ID,
13124
+ chainCategory: "evm",
13125
+ description: "Create an on-chain OrderManager limit order",
13126
+ commonParams: ["keyGen", "purposeText", "useCustomGas"],
13127
+ params: {}
13128
+ },
13129
+ {
13130
+ id: "trueo.cancel-order",
13131
+ protocolId: TRUEO_PROTOCOL_ID,
13132
+ chainCategory: "evm",
13133
+ description: "Cancel an on-chain OrderManager order",
13134
+ commonParams: ["keyGen", "purposeText", "useCustomGas"],
13135
+ params: {}
13136
+ }
13137
+ ]
13138
+ };
13139
+ registerProtocolModule(trueoProtocolModule);
11619
13140
  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");
11620
13141
  var SKILL_PROTOCOL_IDS = [
11621
13142
  "aave-v4",
@@ -11635,6 +13156,8 @@ var SKILL_PROTOCOL_IDS = [
11635
13156
  "pendle",
11636
13157
  "continuum-dao",
11637
13158
  "compound-v3",
13159
+ "derive",
13160
+ "trueo",
11638
13161
  "yield-compare"
11639
13162
  ];
11640
13163
  function getToolsForProtocol(protocolId) {
@@ -12174,6 +13697,72 @@ var PROTOCOL_SUPPORT_ADVISORS = {
12174
13697
  notes: "Arcus on Robinhood Chain (4663): perps via fetch_markets; spot Stock Tokens via spot_fetch_markets. Custody is secp256k1 on 4663; API signing uses paired ed25519 KeyGen (same GroupId)."
12175
13698
  };
12176
13699
  }
13700
+ }),
13701
+ [DERIVE_PROTOCOL_ID]: advisor(DERIVE_PROTOCOL_ID, "api_underlyings", {
13702
+ async supportedChainIds() {
13703
+ return [...DERIVE_ASSET_ROW_CHAIN_IDS];
13704
+ },
13705
+ async supportedTokens(chainId) {
13706
+ if (!isDeriveChainSupported(chainId)) {
13707
+ return { tokens: [], notes: "Derive logo rows are fundable chains only: Ethereum, OP, Base, Arbitrum, HyperEVM, Sepolia." };
13708
+ }
13709
+ const mapped = deriveMappedTokensForChain(chainId);
13710
+ let tokens = mapped;
13711
+ try {
13712
+ const currencies = await deriveFetchCurrenciesRaw({ network: deriveNetworkFromChainId(chainId) });
13713
+ const symbols = new Set(
13714
+ currencies.map((c) => String(c.currency ?? "").toUpperCase()).filter(Boolean)
13715
+ );
13716
+ if (symbols.size > 0) {
13717
+ tokens = mapped.filter((t) => {
13718
+ const s = t.symbol.toUpperCase();
13719
+ return symbols.has(s) || s === "WETH" && symbols.has("ETH") || s === "WBTC" && symbols.has("BTC") || s === "HYPE" || s === "WHYPE";
13720
+ });
13721
+ }
13722
+ } catch {
13723
+ }
13724
+ return {
13725
+ tokens,
13726
+ nativeWrapped: deriveNativeWrappedForChain(chainId),
13727
+ notes: deriveAdvisorNotes()
13728
+ };
13729
+ },
13730
+ async isTokenSupported(chainId, address) {
13731
+ if (!isDeriveChainSupported(chainId)) return false;
13732
+ try {
13733
+ const normalized = viem.getAddress(address).toLowerCase();
13734
+ return deriveMappedTokensForChain(chainId).some((t) => t.address.toLowerCase() === normalized);
13735
+ } catch {
13736
+ return false;
13737
+ }
13738
+ }
13739
+ }),
13740
+ [TRUEO_PROTOCOL_ID]: advisor(TRUEO_PROTOCOL_ID, "fixed_addresses", {
13741
+ async supportedChainIds() {
13742
+ return [TRUEO_BASE_CHAIN_ID];
13743
+ },
13744
+ async supportedTokens(chainId) {
13745
+ if (chainId !== TRUEO_BASE_CHAIN_ID) {
13746
+ return { tokens: [], notes: "Trueo is Base-only (chainId 8453)." };
13747
+ }
13748
+ return {
13749
+ tokens: [
13750
+ { address: TRUEO_TYD, symbol: "TYD", decimals: 6, roles: ["payment"] },
13751
+ { address: TRUEO_TRUE, symbol: "TRUE", decimals: 18, roles: ["governance"] },
13752
+ { address: TRUEO_USDC, symbol: "USDC", decimals: 6, roles: ["adapter_asset"] }
13753
+ ],
13754
+ notes: "Trueo prediction markets on Base. Payment is TYD. Outcome YES/NO tokens are per-market \u2014 use ctm_trueo_search_markets / fetch_market. Chat search: search_prediction_markets (no load required; default live/recent, includeAll for closed)."
13755
+ };
13756
+ },
13757
+ async isTokenSupported(chainId, address) {
13758
+ if (chainId !== TRUEO_BASE_CHAIN_ID) return false;
13759
+ try {
13760
+ const n = viem.getAddress(address).toLowerCase();
13761
+ return n === TRUEO_TYD.toLowerCase() || n === TRUEO_TRUE.toLowerCase() || n === TRUEO_USDC.toLowerCase();
13762
+ } catch {
13763
+ return false;
13764
+ }
13765
+ }
12177
13766
  })
12178
13767
  };
12179
13768
  function getProtocolSupportAdvisor(protocolId) {
@@ -12202,6 +13791,8 @@ registerProtocolModule(aerodromeProtocolModule);
12202
13791
  registerProtocolModule(continuumDaoProtocolModule);
12203
13792
  registerProtocolModule(compoundV3ProtocolModule);
12204
13793
  registerProtocolModule(pendleProtocolModule);
13794
+ registerProtocolModule(deriveProtocolModule);
13795
+ registerProtocolModule(trueoProtocolModule);
12205
13796
  function getAgentCatalog() {
12206
13797
  return {
12207
13798
  protocols: getProtocolModules(),
@@ -12228,6 +13819,8 @@ function getAgentCatalog() {
12228
13819
  continuumDao: continuumDaoProtocolModule,
12229
13820
  compoundV3: compoundV3ProtocolModule,
12230
13821
  pendle: pendleProtocolModule,
13822
+ derive: deriveProtocolModule,
13823
+ trueo: trueoProtocolModule,
12231
13824
  /** Prefer getAgentCatalogForMcp() or getMcpToolDefinitions() for MCP servers. */
12232
13825
  mcp: getAgentCatalogForMcp()
12233
13826
  };
@@ -12242,6 +13835,7 @@ exports.MCP_TOOL_OUTPUT_SCHEMAS = MCP_TOOL_OUTPUT_SCHEMAS;
12242
13835
  exports.MULTISIGN_OUTPUT_DOC = MULTISIGN_OUTPUT_DOC;
12243
13836
  exports.MULTISIGN_SUBMIT_OUTPUT_DOC = MULTISIGN_SUBMIT_OUTPUT_DOC;
12244
13837
  exports.PROTOCOL_SUPPORT_ADVISORS = PROTOCOL_SUPPORT_ADVISORS;
13838
+ exports.agentEvmChainIdSchema = agentEvmChainIdSchema;
12245
13839
  exports.chainDetailSchema = chainDetailSchema;
12246
13840
  exports.evmAddressSchema = evmAddressSchema;
12247
13841
  exports.evmMultisignCommonInputSchema = evmMultisignCommonInputSchema;
@@ -12445,6 +14039,42 @@ exports.mcpCurveDaoQuoteInputSchema = mcpCurveDaoQuoteInputSchema;
12445
14039
  exports.mcpCurveDaoQuoteOutputSchema = mcpCurveDaoQuoteOutputSchema;
12446
14040
  exports.mcpCurveDaoQuoteRemoveLiquidityInputSchema = mcpCurveDaoQuoteRemoveLiquidityInputSchema;
12447
14041
  exports.mcpCurveDaoQuoteRemoveLiquidityOutputSchema = mcpCurveDaoQuoteRemoveLiquidityOutputSchema;
14042
+ exports.mcpDeriveCancelInputSchema = mcpDeriveCancelInputSchema;
14043
+ exports.mcpDeriveDepositAddressTransferInputSchema = mcpDeriveDepositAddressTransferInputSchema;
14044
+ exports.mcpDeriveDepositNewSubaccountInputSchema = mcpDeriveDepositNewSubaccountInputSchema;
14045
+ exports.mcpDeriveFetchCurrenciesInputSchema = mcpDeriveFetchCurrenciesInputSchema;
14046
+ exports.mcpDeriveFetchCurrenciesOutputSchema = mcpDeriveFetchCurrenciesOutputSchema;
14047
+ exports.mcpDeriveFetchMarketSnapshotInputSchema = mcpDeriveFetchMarketSnapshotInputSchema;
14048
+ exports.mcpDeriveFetchMarketSnapshotOutputSchema = mcpDeriveFetchMarketSnapshotOutputSchema;
14049
+ exports.mcpDeriveFetchOhlcvInputSchema = mcpDeriveFetchOhlcvInputSchema;
14050
+ exports.mcpDeriveFetchOhlcvOutputSchema = mcpDeriveFetchOhlcvOutputSchema;
14051
+ exports.mcpDeriveFetchOpenOrdersInputSchema = mcpDeriveFetchOpenOrdersInputSchema;
14052
+ exports.mcpDeriveFetchOpenOrdersOutputSchema = mcpDeriveFetchOpenOrdersOutputSchema;
14053
+ exports.mcpDeriveFetchOptionChainInputSchema = mcpDeriveFetchOptionChainInputSchema;
14054
+ exports.mcpDeriveFetchOptionChainOutputSchema = mcpDeriveFetchOptionChainOutputSchema;
14055
+ exports.mcpDeriveFetchPendingDepositsInputSchema = mcpDeriveFetchPendingDepositsInputSchema;
14056
+ exports.mcpDeriveFetchPendingDepositsOutputSchema = mcpDeriveFetchPendingDepositsOutputSchema;
14057
+ exports.mcpDeriveFetchPortfolioInputSchema = mcpDeriveFetchPortfolioInputSchema;
14058
+ exports.mcpDeriveFetchPortfolioOutputSchema = mcpDeriveFetchPortfolioOutputSchema;
14059
+ exports.mcpDeriveFetchPositionsInputSchema = mcpDeriveFetchPositionsInputSchema;
14060
+ exports.mcpDeriveFetchPositionsOutputSchema = mcpDeriveFetchPositionsOutputSchema;
14061
+ exports.mcpDeriveFetchRiskUniversesInputSchema = mcpDeriveFetchRiskUniversesInputSchema;
14062
+ exports.mcpDeriveFetchRiskUniversesOutputSchema = mcpDeriveFetchRiskUniversesOutputSchema;
14063
+ exports.mcpDeriveFetchSubaccountsInputSchema = mcpDeriveFetchSubaccountsInputSchema;
14064
+ exports.mcpDeriveFetchSubaccountsOutputSchema = mcpDeriveFetchSubaccountsOutputSchema;
14065
+ exports.mcpDeriveFetchTickersInputSchema = mcpDeriveFetchTickersInputSchema;
14066
+ exports.mcpDeriveFetchTickersOutputSchema = mcpDeriveFetchTickersOutputSchema;
14067
+ exports.mcpDeriveHypeVaultDepositInputSchema = mcpDeriveHypeVaultDepositInputSchema;
14068
+ exports.mcpDeriveOrderQuoteInputSchema = mcpDeriveOrderQuoteInputSchema;
14069
+ exports.mcpDeriveOrderQuoteOutputSchema = mcpDeriveOrderQuoteOutputSchema;
14070
+ exports.mcpDerivePlaceOrderInputSchema = mcpDerivePlaceOrderInputSchema;
14071
+ exports.mcpDeriveRegisterDepositAddressInputSchema = mcpDeriveRegisterDepositAddressInputSchema;
14072
+ exports.mcpDeriveRegisterDepositAddressOutputSchema = mcpDeriveRegisterDepositAddressOutputSchema;
14073
+ exports.mcpDeriveReplaceOrderInputSchema = mcpDeriveReplaceOrderInputSchema;
14074
+ exports.mcpDeriveSearchInstrumentsInputSchema = mcpDeriveSearchInstrumentsInputSchema;
14075
+ exports.mcpDeriveSearchInstrumentsOutputSchema = mcpDeriveSearchInstrumentsOutputSchema;
14076
+ exports.mcpDeriveSocketDepositInputSchema = mcpDeriveSocketDepositInputSchema;
14077
+ exports.mcpDeriveTransferSpotInputSchema = mcpDeriveTransferSpotInputSchema;
12448
14078
  exports.mcpEthenaClaimInputSchema = mcpEthenaClaimInputSchema;
12449
14079
  exports.mcpEthenaCooldownInputSchema = mcpEthenaCooldownInputSchema;
12450
14080
  exports.mcpEthenaFetchSusdeApyInputSchema = mcpEthenaFetchSusdeApyInputSchema;
@@ -12462,6 +14092,8 @@ exports.mcpEulerV2IsolatedBorrowInputSchema = mcpEulerV2IsolatedBorrowInputSchem
12462
14092
  exports.mcpEulerV2IsolatedLendInputSchema = mcpEulerV2IsolatedLendInputSchema;
12463
14093
  exports.mcpEulerV2MerklClaimInputSchema = mcpEulerV2MerklClaimInputSchema;
12464
14094
  exports.mcpEulerV2VaultWithdrawInputSchema = mcpEulerV2VaultWithdrawInputSchema;
14095
+ exports.mcpGetPredictionMarketInputSchema = mcpGetPredictionMarketInputSchema;
14096
+ exports.mcpGetPredictionMarketOutputSchema = mcpGetPredictionMarketOutputSchema;
12465
14097
  exports.mcpGmxCancelInputSchema = mcpGmxCancelInputSchema;
12466
14098
  exports.mcpGmxDecreaseInputSchema = mcpGmxDecreaseInputSchema;
12467
14099
  exports.mcpGmxFetchGmApyInputSchema = mcpGmxFetchGmApyInputSchema;
@@ -12526,6 +14158,7 @@ exports.mcpHyperliquidLimitOrderInputSchema = mcpHyperliquidLimitOrderInputSchem
12526
14158
  exports.mcpHyperliquidSearchMarketsInputSchema = mcpHyperliquidSearchMarketsInputSchema;
12527
14159
  exports.mcpHyperliquidSearchMarketsOutputSchema = mcpHyperliquidSearchMarketsOutputSchema;
12528
14160
  exports.mcpHyperliquidStakeInputSchema = mcpHyperliquidStakeInputSchema;
14161
+ exports.mcpHyperliquidTrailingStopInputSchema = mcpHyperliquidTrailingStopInputSchema;
12529
14162
  exports.mcpHyperliquidUndelegateInputSchema = mcpHyperliquidUndelegateInputSchema;
12530
14163
  exports.mcpHyperliquidUnstakeInputSchema = mcpHyperliquidUnstakeInputSchema;
12531
14164
  exports.mcpHyperliquidUpdateLeverageInputSchema = mcpHyperliquidUpdateLeverageInputSchema;
@@ -12539,6 +14172,8 @@ exports.mcpLidoRequestWithdrawalsInputSchema = mcpLidoRequestWithdrawalsInputSch
12539
14172
  exports.mcpLidoSubmitInputSchema = mcpLidoSubmitInputSchema;
12540
14173
  exports.mcpLidoUnwrapWstEthInputSchema = mcpLidoUnwrapWstEthInputSchema;
12541
14174
  exports.mcpLidoWrapStEthInputSchema = mcpLidoWrapStEthInputSchema;
14175
+ exports.mcpListMyPredictionMarketsInputSchema = mcpListMyPredictionMarketsInputSchema;
14176
+ exports.mcpListMyPredictionMarketsOutputSchema = mcpListMyPredictionMarketsOutputSchema;
12542
14177
  exports.mcpMapleDepositInputSchema = mcpMapleDepositInputSchema;
12543
14178
  exports.mcpMapleFetchMarketInputSchema = mcpMapleFetchMarketInputSchema;
12544
14179
  exports.mcpMapleFetchMarketOutputSchema = mcpMapleFetchMarketOutputSchema;
@@ -12606,6 +14241,9 @@ exports.mcpPendleQuoteRemoveLiquidityInputSchema = mcpPendleQuoteRemoveLiquidity
12606
14241
  exports.mcpPendleQuoteSwapInputSchema = mcpPendleQuoteSwapInputSchema;
12607
14242
  exports.mcpPendleSearchAssetsInputSchema = mcpPendleSearchAssetsInputSchema;
12608
14243
  exports.mcpPendleSearchAssetsOutputSchema = mcpPendleSearchAssetsOutputSchema;
14244
+ exports.mcpPredictionMarketRowSchema = mcpPredictionMarketRowSchema;
14245
+ exports.mcpSearchPredictionMarketsInputSchema = mcpSearchPredictionMarketsInputSchema;
14246
+ exports.mcpSearchPredictionMarketsOutputSchema = mcpSearchPredictionMarketsOutputSchema;
12609
14247
  exports.mcpServerCommonInputSchema = mcpServerCommonInputSchema;
12610
14248
  exports.mcpServerMultisignInput = mcpServerMultisignInput;
12611
14249
  exports.mcpServerSubmitOutputSchema = mcpServerSubmitOutputSchema;
@@ -12618,6 +14256,27 @@ exports.mcpSkyLockstakeStakeInputSchema = mcpSkyLockstakeStakeInputSchema;
12618
14256
  exports.mcpSkyLockstakeWipeInputSchema = mcpSkyLockstakeWipeInputSchema;
12619
14257
  exports.mcpSkySusdsDepositInputSchema = mcpSkySusdsDepositInputSchema;
12620
14258
  exports.mcpSkySusdsRedeemInputSchema = mcpSkySusdsRedeemInputSchema;
14259
+ exports.mcpTrueoBurnInputSchema = mcpTrueoBurnInputSchema;
14260
+ exports.mcpTrueoCancelOrderInputSchema = mcpTrueoCancelOrderInputSchema;
14261
+ exports.mcpTrueoCreateOrderInputSchema = mcpTrueoCreateOrderInputSchema;
14262
+ exports.mcpTrueoFetchCategoriesInputSchema = mcpTrueoFetchCategoriesInputSchema;
14263
+ exports.mcpTrueoFetchCategoriesOutputSchema = mcpTrueoFetchCategoriesOutputSchema;
14264
+ exports.mcpTrueoFetchChanceSeriesInputSchema = mcpTrueoFetchChanceSeriesInputSchema;
14265
+ exports.mcpTrueoFetchChanceSeriesOutputSchema = mcpTrueoFetchChanceSeriesOutputSchema;
14266
+ exports.mcpTrueoFetchMarketInputSchema = mcpTrueoFetchMarketInputSchema;
14267
+ exports.mcpTrueoFetchMarketOutputSchema = mcpTrueoFetchMarketOutputSchema;
14268
+ exports.mcpTrueoFetchOrderbookInputSchema = mcpTrueoFetchOrderbookInputSchema;
14269
+ exports.mcpTrueoFetchOrderbookOutputSchema = mcpTrueoFetchOrderbookOutputSchema;
14270
+ exports.mcpTrueoFetchTrendingInputSchema = mcpTrueoFetchTrendingInputSchema;
14271
+ exports.mcpTrueoFetchTrendingOutputSchema = mcpTrueoFetchTrendingOutputSchema;
14272
+ exports.mcpTrueoMarketRowSchema = mcpTrueoMarketRowSchema;
14273
+ exports.mcpTrueoMintInputSchema = mcpTrueoMintInputSchema;
14274
+ exports.mcpTrueoRedeemInputSchema = mcpTrueoRedeemInputSchema;
14275
+ exports.mcpTrueoSearchMarketsInputSchema = mcpTrueoSearchMarketsInputSchema;
14276
+ exports.mcpTrueoSearchMarketsOutputSchema = mcpTrueoSearchMarketsOutputSchema;
14277
+ exports.mcpTrueoSwapInputSchema = mcpTrueoSwapInputSchema;
14278
+ exports.mcpTrueoUnwrapTydInputSchema = mcpTrueoUnwrapTydInputSchema;
14279
+ exports.mcpTrueoWrapTydInputSchema = mcpTrueoWrapTydInputSchema;
12621
14280
  exports.mcpUniswapV4BuildAllowlistFinalizeMultisignInputSchema = mcpUniswapV4BuildAllowlistFinalizeMultisignInputSchema;
12622
14281
  exports.mcpUniswapV4BuildCollectFeesMultisignInputSchema = mcpUniswapV4BuildCollectFeesMultisignInputSchema;
12623
14282
  exports.mcpUniswapV4BuildDecreaseLiquidityMultisignInputSchema = mcpUniswapV4BuildDecreaseLiquidityMultisignInputSchema;