@continuumdao/ctm-mpc-defi 0.2.47 → 0.2.49
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent/catalog.cjs +1181 -13
- package/dist/agent/catalog.cjs.map +1 -1
- package/dist/agent/catalog.d.ts +1532 -7
- package/dist/agent/catalog.js +1142 -14
- package/dist/agent/catalog.js.map +1 -1
- package/dist/agent/skills/continuum-dao/SKILL.md +2 -0
- package/dist/agent/skills/derive/SKILL.md +112 -0
- package/dist/agent/skills/hyperliquid/SKILL.md +22 -2
- package/dist/chains/evm/index.d.ts +118 -6
- package/dist/chains/near/index.d.ts +7 -1
- package/dist/chains/solana/index.d.ts +7 -1
- package/dist/core/index.cjs +2 -1
- package/dist/core/index.cjs.map +1 -1
- package/dist/core/index.d.ts +138 -7
- package/dist/core/index.js +2 -1
- package/dist/core/index.js.map +1 -1
- package/dist/index.cjs +2 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +848 -16
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/protocols/evm/aave-v4/index.d.ts +600 -6
- package/dist/protocols/evm/aerodrome/index.cjs.map +1 -1
- package/dist/protocols/evm/aerodrome/index.d.ts +125 -5
- package/dist/protocols/evm/aerodrome/index.js.map +1 -1
- package/dist/protocols/evm/arcus/index.d.ts +66 -2
- package/dist/protocols/evm/circle-cctp/index.d.ts +71 -2
- package/dist/protocols/evm/compound-v3/index.d.ts +52 -1
- package/dist/protocols/evm/continuum-dao/index.cjs +475 -1
- package/dist/protocols/evm/continuum-dao/index.cjs.map +1 -1
- package/dist/protocols/evm/continuum-dao/index.d.ts +230 -2
- package/dist/protocols/evm/continuum-dao/index.js +463 -3
- package/dist/protocols/evm/continuum-dao/index.js.map +1 -1
- package/dist/protocols/evm/curve-dao/index.d.ts +66 -2
- package/dist/protocols/evm/derive/index.cjs +2655 -0
- package/dist/protocols/evm/derive/index.cjs.map +1 -0
- package/dist/protocols/evm/derive/index.d.ts +859 -0
- package/dist/protocols/evm/derive/index.js +2536 -0
- package/dist/protocols/evm/derive/index.js.map +1 -0
- package/dist/protocols/evm/ethena/index.d.ts +52 -1
- package/dist/protocols/evm/euler-v2/index.d.ts +115 -16
- package/dist/protocols/evm/gmx/index.d.ts +66 -2
- package/dist/protocols/evm/hyperliquid/index.cjs +545 -267
- package/dist/protocols/evm/hyperliquid/index.cjs.map +1 -1
- package/dist/protocols/evm/hyperliquid/index.d.ts +152 -7
- package/dist/protocols/evm/hyperliquid/index.js +535 -269
- package/dist/protocols/evm/hyperliquid/index.js.map +1 -1
- package/dist/protocols/evm/lido/index.d.ts +52 -1
- package/dist/protocols/evm/maple/index.d.ts +52 -1
- package/dist/protocols/evm/morpho/index.d.ts +115 -4
- package/dist/protocols/evm/pendle/index.cjs +2 -1
- package/dist/protocols/evm/pendle/index.cjs.map +1 -1
- package/dist/protocols/evm/pendle/index.d.ts +125 -5
- package/dist/protocols/evm/pendle/index.js +2 -1
- package/dist/protocols/evm/pendle/index.js.map +1 -1
- package/dist/protocols/evm/permit2/index.d.ts +14 -1
- package/dist/protocols/evm/sky/index.d.ts +52 -1
- package/dist/protocols/evm/uniswap-v4/index.d.ts +78 -4
- package/dist/protocols/evm/venice/index.d.ts +52 -1
- package/package.json +7 -2
- package/dist/buildBatch-tsEUVn_a.d.ts +0 -45
- package/dist/eip712Multisign-6oNIlObj.d.ts +0 -39
- package/dist/envelope-Cm-llShH.d.ts +0 -37
- package/dist/merklDistributor-CdqtZC9N.d.ts +0 -65
- package/dist/multisign-Dr0j9fHm.d.ts +0 -489
- package/dist/registry-BvsXh0-r.d.ts +0 -8
- package/dist/types-RJpoU4Pc.d.ts +0 -34
- package/dist/types-lIfv59N1.d.ts +0 -63
package/dist/agent/catalog.cjs
CHANGED
|
@@ -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;
|
|
@@ -3519,6 +3550,62 @@ var mcpContinuumDaoFetchProposalInputSchema = zod.z.object({
|
|
|
3519
3550
|
var mcpContinuumDaoFetchProposalOutputSchema = zod.z.object({
|
|
3520
3551
|
proposal: zod.z.unknown()
|
|
3521
3552
|
});
|
|
3553
|
+
var mcpContinuumDaoProposalVoteRowSchema = zod.z.object({
|
|
3554
|
+
voter: zod.z.string(),
|
|
3555
|
+
explorerUrl: zod.z.string(),
|
|
3556
|
+
support: zod.z.number().int(),
|
|
3557
|
+
supportLabel: zod.z.string(),
|
|
3558
|
+
weight: zod.z.string(),
|
|
3559
|
+
weightCtm: zod.z.string(),
|
|
3560
|
+
reason: zod.z.string(),
|
|
3561
|
+
optionWeights: zod.z.array(zod.z.string()).optional(),
|
|
3562
|
+
how: zod.z.string(),
|
|
3563
|
+
attached: zod.z.boolean(),
|
|
3564
|
+
attachedTokenId: zod.z.string().optional(),
|
|
3565
|
+
nodeInfo: zod.z.object({
|
|
3566
|
+
forumHandle: zod.z.string().optional(),
|
|
3567
|
+
email: zod.z.string().optional(),
|
|
3568
|
+
ipv4: zod.z.string().optional(),
|
|
3569
|
+
ipv6: zod.z.string().optional(),
|
|
3570
|
+
vpsProvider: zod.z.string().optional(),
|
|
3571
|
+
ramInstalled: zod.z.string().optional(),
|
|
3572
|
+
cpuCores: zod.z.string().optional(),
|
|
3573
|
+
dIDType: zod.z.string().optional(),
|
|
3574
|
+
dID: zod.z.string().optional(),
|
|
3575
|
+
dataHex: zod.z.string().optional()
|
|
3576
|
+
}).strict().optional(),
|
|
3577
|
+
txHash: zod.z.string().optional(),
|
|
3578
|
+
txExplorerUrl: zod.z.string().optional(),
|
|
3579
|
+
blockNumber: zod.z.string().optional()
|
|
3580
|
+
});
|
|
3581
|
+
var mcpContinuumDaoFetchProposalVotesInputSchema = zod.z.object({
|
|
3582
|
+
chainId: zod.z.union([zod.z.string(), zod.z.number()]),
|
|
3583
|
+
rpcUrl: zod.z.string().min(1),
|
|
3584
|
+
proposalId: zod.z.union([zod.z.string(), zod.z.number()]),
|
|
3585
|
+
governor: evmAddressSchema.optional(),
|
|
3586
|
+
votingEscrow: evmAddressSchema.optional(),
|
|
3587
|
+
nodeProperties: evmAddressSchema.optional(),
|
|
3588
|
+
fromBlock: zod.z.union([zod.z.string(), zod.z.number()]).optional(),
|
|
3589
|
+
toBlock: zod.z.union([zod.z.string(), zod.z.number()]).optional()
|
|
3590
|
+
});
|
|
3591
|
+
var mcpContinuumDaoFetchProposalVotesOutputSchema = zod.z.object({
|
|
3592
|
+
proposalId: zod.z.string(),
|
|
3593
|
+
catalogId: zod.z.number().optional(),
|
|
3594
|
+
governor: zod.z.string(),
|
|
3595
|
+
nodeProperties: zod.z.string().optional(),
|
|
3596
|
+
title: zod.z.string().optional(),
|
|
3597
|
+
configuration: zod.z.enum(["bravo", "delta"]).optional(),
|
|
3598
|
+
fromBlock: zod.z.string(),
|
|
3599
|
+
toBlock: zod.z.string(),
|
|
3600
|
+
truncated: zod.z.boolean(),
|
|
3601
|
+
votes: zod.z.array(mcpContinuumDaoProposalVoteRowSchema),
|
|
3602
|
+
voterCount: zod.z.number().int().nonnegative(),
|
|
3603
|
+
attachedVoterCount: zod.z.number().int().nonnegative(),
|
|
3604
|
+
forWeight: zod.z.string(),
|
|
3605
|
+
againstWeight: zod.z.string(),
|
|
3606
|
+
abstainWeight: zod.z.string(),
|
|
3607
|
+
note: zod.z.string()
|
|
3608
|
+
});
|
|
3522
3609
|
var liveProposalRowSchema = zod.z.object({
|
|
3523
3610
|
id: zod.z.number().optional(),
|
|
3524
3611
|
onchainId: zod.z.string(),
|
|
@@ -4516,6 +4603,34 @@ var mcpGmxFetchOhlcvOutputSchema = zod.z.object({
|
|
|
4516
4603
|
candleCount: zod.z.number().int().nonnegative(),
|
|
4517
4604
|
candles: zod.z.array(gmxOhlcvCandleSchema)
|
|
4518
4605
|
});
|
|
4606
|
+
function hyperliquidFloatToWire(value) {
|
|
4607
|
+
const n = typeof value === "number" ? value : Number.parseFloat(String(value).trim());
|
|
4608
|
+
if (!Number.isFinite(n)) throw new Error("Invalid Hyperliquid wire number.");
|
|
4609
|
+
const rounded = n.toFixed(8);
|
|
4610
|
+
if (Math.abs(Number.parseFloat(rounded) - n) >= 1e-12) {
|
|
4611
|
+
throw new Error(`Hyperliquid wire value ${value} has too many decimal places.`);
|
|
4612
|
+
}
|
|
4613
|
+
const normalized = Number(rounded === "-0" ? "0" : rounded);
|
|
4614
|
+
return String(normalized);
|
|
4615
|
+
}
|
|
4616
|
+
var HYPERLIQUID_TRAILING_ACTIVATION_PX_ERROR = "Invalid trailing activation price.";
|
|
4617
|
+
var POSITIVE_DECIMAL_RE = /^\d+(\.\d+)?$/;
|
|
4618
|
+
function parseHyperliquidTrailingActivationPx(value) {
|
|
4619
|
+
if (value == null) return null;
|
|
4620
|
+
const raw = String(value).trim().replace(/,/g, "");
|
|
4621
|
+
if (!raw) return null;
|
|
4622
|
+
if (!POSITIVE_DECIMAL_RE.test(raw)) {
|
|
4623
|
+
throw new Error(HYPERLIQUID_TRAILING_ACTIVATION_PX_ERROR);
|
|
4624
|
+
}
|
|
4625
|
+
const px = Number.parseFloat(raw);
|
|
4626
|
+
if (!Number.isFinite(px) || px <= 0) {
|
|
4627
|
+
throw new Error(HYPERLIQUID_TRAILING_ACTIVATION_PX_ERROR);
|
|
4628
|
+
}
|
|
4629
|
+
hyperliquidFloatToWire(raw);
|
|
4630
|
+
return raw;
|
|
4631
|
+
}
|
|
4632
|
+
|
|
4633
|
+
// src/agent/schemas/hyperliquid.ts
|
|
4519
4634
|
function mcpHyperliquidMultisignInput(fields, preprocess) {
|
|
4520
4635
|
const inner = evmMultisignCommonInputSchema.extend(fields);
|
|
4521
4636
|
const shaped = preprocess ? zod.z.preprocess(preprocess, inner) : inner;
|
|
@@ -4663,7 +4778,16 @@ var mcpHyperliquidFetchOpenOrdersOutputSchema = zod.z.object({
|
|
|
4663
4778
|
sz: zod.z.string(),
|
|
4664
4779
|
oid: zod.z.number().describe("Pass to build_cancel_multisign as oid"),
|
|
4665
4780
|
timestamp: zod.z.number(),
|
|
4666
|
-
reduceOnly: zod.z.boolean().optional()
|
|
4781
|
+
reduceOnly: zod.z.boolean().optional(),
|
|
4782
|
+
isTrigger: zod.z.boolean().optional(),
|
|
4783
|
+
triggerPx: zod.z.string().optional(),
|
|
4784
|
+
triggerCondition: zod.z.string().optional(),
|
|
4785
|
+
orderType: zod.z.string().optional(),
|
|
4786
|
+
trailingStop: zod.z.object({
|
|
4787
|
+
retracement: zod.z.string(),
|
|
4788
|
+
activationPx: zod.z.string().nullable(),
|
|
4789
|
+
bestPx: zod.z.string().nullable()
|
|
4790
|
+
}).nullable().optional()
|
|
4667
4791
|
})
|
|
4668
4792
|
)
|
|
4669
4793
|
});
|
|
@@ -4788,6 +4912,16 @@ var mcpHyperliquidFetchDelegationsOutputSchema = zod.z.object({
|
|
|
4788
4912
|
)
|
|
4789
4913
|
});
|
|
4790
4914
|
var hyperliquidTpslExecModeSchema = zod.z.enum(["limit_at_trigger", "market"]);
|
|
4915
|
+
var mcpHyperliquidTrailingActivationPxSchema = zod.z.string().min(1).optional().superRefine((value, ctx) => {
|
|
4916
|
+
try {
|
|
4917
|
+
parseHyperliquidTrailingActivationPx(value);
|
|
4918
|
+
} catch (e) {
|
|
4919
|
+
ctx.addIssue({
|
|
4920
|
+
code: zod.z.ZodIssueCode.custom,
|
|
4921
|
+
message: e instanceof Error ? e.message : "Invalid trailing activation price."
|
|
4922
|
+
});
|
|
4923
|
+
}
|
|
4924
|
+
}).describe("Optional mark price where trailing tracking begins. Omit to start immediately.");
|
|
4791
4925
|
var mcpHyperliquidLimitOrderInputSchema = mcpHyperliquidMultisignInput(
|
|
4792
4926
|
{
|
|
4793
4927
|
coin: zod.z.string().min(1).describe("coin from fetch_markets (name) or search_markets"),
|
|
@@ -4799,10 +4933,30 @@ var mcpHyperliquidLimitOrderInputSchema = mcpHyperliquidMultisignInput(
|
|
|
4799
4933
|
dex: zod.z.string().optional(),
|
|
4800
4934
|
takeProfitTriggerPxHuman: zod.z.string().min(1).optional().describe("Take-profit trigger price \u2014 with SL enables L1 normalTpsl bracket (EIP-712, not CoreWriter)."),
|
|
4801
4935
|
stopLossTriggerPxHuman: zod.z.string().min(1).optional().describe("Stop-loss trigger price \u2014 with TP enables L1 normalTpsl bracket (EIP-712, not CoreWriter)."),
|
|
4802
|
-
tpslExecMode: hyperliquidTpslExecModeSchema.optional().describe("Trigger execution: limit_at_trigger (default) or market.")
|
|
4936
|
+
tpslExecMode: hyperliquidTpslExecModeSchema.optional().describe("Trigger execution: limit_at_trigger (default) or market."),
|
|
4937
|
+
trailingOffsetHuman: zod.z.string().min(1).optional().describe(
|
|
4938
|
+
"Trailing-stop retracement (price distance or percent). Cannot combine with stopLossTriggerPxHuman. Perp only \u2014 EIP-712 /exchange."
|
|
4939
|
+
),
|
|
4940
|
+
trailingOffsetType: zod.z.enum(["price", "percentage"]).optional().describe("price = fixed distance; percentage = retracement rate (default)."),
|
|
4941
|
+
trailingActivationPxHuman: mcpHyperliquidTrailingActivationPxSchema
|
|
4803
4942
|
},
|
|
4804
4943
|
preprocessHyperliquidLimitOrderInput
|
|
4805
4944
|
);
|
|
4945
|
+
var mcpHyperliquidTrailingStopInputSchema = mcpHyperliquidMultisignInput(
|
|
4946
|
+
{
|
|
4947
|
+
coin: zod.z.string().min(1).describe("perp coin from fetch_markets or fetch_positions"),
|
|
4948
|
+
isBuy: agentBooleanSchema().describe(
|
|
4949
|
+
"Execution side: false to close a long / open a short; true to close a short / open a long."
|
|
4950
|
+
),
|
|
4951
|
+
szHuman: zod.z.string().min(1).describe("Size in coin units (use position size to close)."),
|
|
4952
|
+
reduceOnly: agentBooleanSchema().optional().describe("true (default) closes/reduces; false can open a position."),
|
|
4953
|
+
trailingOffsetHuman: zod.z.string().min(1).describe("Retracement distance or percent (e.g. 2 or 2%)."),
|
|
4954
|
+
trailingOffsetType: zod.z.enum(["price", "percentage"]).optional().describe("price = fixed distance; percentage = retracement rate (default)."),
|
|
4955
|
+
trailingActivationPxHuman: mcpHyperliquidTrailingActivationPxSchema,
|
|
4956
|
+
dex: zod.z.string().optional()
|
|
4957
|
+
},
|
|
4958
|
+
preprocessHyperliquidTrailingStopInput
|
|
4959
|
+
);
|
|
4806
4960
|
var mcpHyperliquidCloseInputSchema = mcpHyperliquidMultisignInput(
|
|
4807
4961
|
{
|
|
4808
4962
|
coin: zod.z.string().min(1),
|
|
@@ -5134,6 +5288,305 @@ var mcpArcusBuildWithdrawMultisignInputSchema = withMultisignKeySourceRefine(
|
|
|
5134
5288
|
product: arcusFundProductSchema
|
|
5135
5289
|
})
|
|
5136
5290
|
);
|
|
5291
|
+
function mcpDeriveMultisignInput(fields) {
|
|
5292
|
+
return withMultisignKeySourceRefine(evmMultisignCommonInputSchema.extend(fields));
|
|
5293
|
+
}
|
|
5294
|
+
var deriveAuthSchema = zod.z.object({
|
|
5295
|
+
wallet: zod.z.string().min(1),
|
|
5296
|
+
timestamp: zod.z.string().min(1),
|
|
5297
|
+
signature: zod.z.string().min(1)
|
|
5298
|
+
}).optional().describe("Server-filled EIP-191 login (X-DeriveWallet / Timestamp / Signature). Agents must not pass auth.");
|
|
5299
|
+
var deriveNetworkSchema = zod.z.enum(["mainnet", "testnet"]).optional();
|
|
5300
|
+
var deriveFetchBaseSchema = zod.z.object({
|
|
5301
|
+
chainId: zod.z.coerce.number().int().positive().optional().describe("Asset-row chain (dialog context). Trading is always Derive API."),
|
|
5302
|
+
network: deriveNetworkSchema
|
|
5303
|
+
});
|
|
5304
|
+
var deriveWalletSchema = deriveFetchBaseSchema.extend({
|
|
5305
|
+
wallet: evmAddressSchema.optional(),
|
|
5306
|
+
executorAddress: evmAddressSchema.optional().describe("MPC executor \u2014 same address is the Derive owner on every chain."),
|
|
5307
|
+
auth: deriveAuthSchema
|
|
5308
|
+
});
|
|
5309
|
+
var deriveOhlcvIntervalSchema = zod.z.enum(["1m", "5m", "15m", "30m", "1h", "4h", "1d", "1w"]);
|
|
5310
|
+
var deriveOhlcvCandleSchema = zod.z.object({
|
|
5311
|
+
timestampMs: zod.z.number(),
|
|
5312
|
+
open: zod.z.string(),
|
|
5313
|
+
high: zod.z.string(),
|
|
5314
|
+
low: zod.z.string(),
|
|
5315
|
+
close: zod.z.string(),
|
|
5316
|
+
volume: zod.z.string()
|
|
5317
|
+
});
|
|
5318
|
+
var mcpDeriveFetchCurrenciesInputSchema = deriveFetchBaseSchema;
|
|
5319
|
+
var mcpDeriveFetchCurrenciesOutputSchema = zod.z.object({
|
|
5320
|
+
currencies: zod.z.array(zod.z.object({ currency: zod.z.string() })),
|
|
5321
|
+
network: zod.z.string().optional()
|
|
5322
|
+
});
|
|
5323
|
+
var mcpDeriveFetchOptionChainInputSchema = deriveFetchBaseSchema.extend({
|
|
5324
|
+
currency: zod.z.string().min(1).describe("Underlying currency e.g. ETH"),
|
|
5325
|
+
expired: zod.z.boolean().optional()
|
|
5326
|
+
});
|
|
5327
|
+
var mcpDeriveFetchOptionChainOutputSchema = zod.z.object({
|
|
5328
|
+
currency: zod.z.string(),
|
|
5329
|
+
instrumentCount: zod.z.number(),
|
|
5330
|
+
callCount: zod.z.number(),
|
|
5331
|
+
putCount: zod.z.number(),
|
|
5332
|
+
expiries: zod.z.array(
|
|
5333
|
+
zod.z.object({
|
|
5334
|
+
expiryYmd: zod.z.string(),
|
|
5335
|
+
expiryUnix: zod.z.number().nullable(),
|
|
5336
|
+
callCount: zod.z.number(),
|
|
5337
|
+
putCount: zod.z.number(),
|
|
5338
|
+
minStrike: zod.z.string().nullable(),
|
|
5339
|
+
maxStrike: zod.z.string().nullable()
|
|
5340
|
+
})
|
|
5341
|
+
),
|
|
5342
|
+
notes: zod.z.string(),
|
|
5343
|
+
network: zod.z.string().optional()
|
|
5344
|
+
});
|
|
5345
|
+
var mcpDeriveFetchTickersInputSchema = deriveFetchBaseSchema.extend({
|
|
5346
|
+
currency: zod.z.string().min(1).describe("Underlying e.g. ETH"),
|
|
5347
|
+
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."),
|
|
5348
|
+
optionType: zod.z.enum(["C", "P"]).optional().describe("Calls only or puts only. Omit for both."),
|
|
5349
|
+
ladder: zod.z.enum(["atm", "all"]).optional().describe("Default atm (~9 strikes around index). Use all only when the operator wants every strike.")
|
|
5350
|
+
});
|
|
5351
|
+
var mcpDeriveFetchTickersOutputSchema = zod.z.object({
|
|
5352
|
+
currency: zod.z.string(),
|
|
5353
|
+
expiryDate: zod.z.string(),
|
|
5354
|
+
optionType: zod.z.enum(["C", "P"]).nullable().optional(),
|
|
5355
|
+
ladder: zod.z.enum(["atm", "all"]).optional(),
|
|
5356
|
+
indexPx: zod.z.string().nullable().optional(),
|
|
5357
|
+
listedCount: zod.z.number().optional(),
|
|
5358
|
+
tickerCount: zod.z.number().optional(),
|
|
5359
|
+
callCount: zod.z.number().optional(),
|
|
5360
|
+
putCount: zod.z.number().optional(),
|
|
5361
|
+
tickers: zod.z.array(
|
|
5362
|
+
zod.z.object({
|
|
5363
|
+
instrumentName: zod.z.string(),
|
|
5364
|
+
bidPx: zod.z.string().nullable(),
|
|
5365
|
+
askPx: zod.z.string().nullable(),
|
|
5366
|
+
markPx: zod.z.string().nullable(),
|
|
5367
|
+
indexPx: zod.z.string().nullable(),
|
|
5368
|
+
strike: zod.z.string().nullable(),
|
|
5369
|
+
expiry: zod.z.number().nullable(),
|
|
5370
|
+
expiryYmd: zod.z.string().nullable(),
|
|
5371
|
+
optionType: zod.z.enum(["C", "P"]).nullable(),
|
|
5372
|
+
greeks: zod.z.unknown().nullable()
|
|
5373
|
+
})
|
|
5374
|
+
),
|
|
5375
|
+
notes: zod.z.string().optional(),
|
|
5376
|
+
network: zod.z.string().optional()
|
|
5377
|
+
});
|
|
5378
|
+
var mcpDeriveSearchInstrumentsInputSchema = deriveFetchBaseSchema.extend({
|
|
5379
|
+
currency: zod.z.string().min(1),
|
|
5380
|
+
query: zod.z.string().min(1).describe("Instrument name fragment e.g. 3000-C or 20260626"),
|
|
5381
|
+
limit: zod.z.coerce.number().int().positive().max(50).optional()
|
|
5382
|
+
});
|
|
5383
|
+
var mcpDeriveSearchInstrumentsOutputSchema = zod.z.object({
|
|
5384
|
+
instruments: zod.z.array(zod.z.object({ instrumentName: zod.z.string() })),
|
|
5385
|
+
network: zod.z.string().optional()
|
|
5386
|
+
});
|
|
5387
|
+
var mcpDeriveFetchMarketSnapshotInputSchema = deriveFetchBaseSchema.extend({
|
|
5388
|
+
instrumentName: zod.z.string().min(1).describe("e.g. ETH-20260626-3000-C")
|
|
5389
|
+
});
|
|
5390
|
+
var mcpDeriveFetchMarketSnapshotOutputSchema = zod.z.object({
|
|
5391
|
+
snapshot: zod.z.object({
|
|
5392
|
+
instrumentName: zod.z.string(),
|
|
5393
|
+
livePrice: zod.z.object({
|
|
5394
|
+
markPx: zod.z.string().nullable(),
|
|
5395
|
+
indexPx: zod.z.string().nullable(),
|
|
5396
|
+
bidPx: zod.z.string().nullable(),
|
|
5397
|
+
askPx: zod.z.string().nullable(),
|
|
5398
|
+
midUsd: zod.z.string(),
|
|
5399
|
+
source: zod.z.string()
|
|
5400
|
+
}),
|
|
5401
|
+
greeks: zod.z.unknown().nullable(),
|
|
5402
|
+
fetchedAtMs: zod.z.number()
|
|
5403
|
+
}),
|
|
5404
|
+
network: zod.z.string().optional()
|
|
5405
|
+
});
|
|
5406
|
+
var mcpDeriveFetchOhlcvInputSchema = deriveFetchBaseSchema.extend({
|
|
5407
|
+
instrumentName: zod.z.string().optional().describe("Required for option candles"),
|
|
5408
|
+
currency: zod.z.string().optional().describe("Required for index candles (underlying spot)"),
|
|
5409
|
+
marketKind: zod.z.enum(["option", "index"]).optional(),
|
|
5410
|
+
interval: deriveOhlcvIntervalSchema.optional(),
|
|
5411
|
+
lookbackDays: zod.z.coerce.number().positive().optional(),
|
|
5412
|
+
lookbackHours: zod.z.coerce.number().positive().optional(),
|
|
5413
|
+
startTimeMs: zod.z.coerce.number().int().positive().optional(),
|
|
5414
|
+
endTimeMs: zod.z.coerce.number().int().positive().optional()
|
|
5415
|
+
});
|
|
5416
|
+
var mcpDeriveFetchOhlcvOutputSchema = zod.z.object({
|
|
5417
|
+
ohlcv: zod.z.object({
|
|
5418
|
+
market: zod.z.string(),
|
|
5419
|
+
coin: zod.z.string(),
|
|
5420
|
+
interval: zod.z.string(),
|
|
5421
|
+
marketKind: zod.z.enum(["option", "index"]),
|
|
5422
|
+
startTimeMs: zod.z.number(),
|
|
5423
|
+
endTimeMs: zod.z.number(),
|
|
5424
|
+
expectedBars: zod.z.number(),
|
|
5425
|
+
candleCount: zod.z.number(),
|
|
5426
|
+
latestCandle: deriveOhlcvCandleSchema.nullable(),
|
|
5427
|
+
candles: zod.z.array(deriveOhlcvCandleSchema),
|
|
5428
|
+
fetchedAtMs: zod.z.number(),
|
|
5429
|
+
dataSource: zod.z.literal("derive")
|
|
5430
|
+
}),
|
|
5431
|
+
dataSource: zod.z.literal("derive"),
|
|
5432
|
+
network: zod.z.string().optional()
|
|
5433
|
+
});
|
|
5434
|
+
var mcpDeriveOrderQuoteInputSchema = deriveFetchBaseSchema.extend({
|
|
5435
|
+
instrumentName: zod.z.string().min(1),
|
|
5436
|
+
direction: zod.z.enum(["buy", "sell"]),
|
|
5437
|
+
amount: zod.z.string().min(1),
|
|
5438
|
+
limitPrice: zod.z.string().min(1),
|
|
5439
|
+
subaccountId: agentCoercedIntSchema(zod.z.number().int().positive()).optional().describe("Required by v3 public/order_quote. From ctm_derive_fetch_subaccounts. Never 0.")
|
|
5440
|
+
});
|
|
5441
|
+
var mcpDeriveOrderQuoteOutputSchema = zod.z.object({
|
|
5442
|
+
quote: jsonObjectSchema,
|
|
5443
|
+
instrumentName: zod.z.string(),
|
|
5444
|
+
network: zod.z.string().optional()
|
|
5445
|
+
});
|
|
5446
|
+
var mcpDeriveFetchRiskUniversesInputSchema = deriveFetchBaseSchema;
|
|
5447
|
+
var mcpDeriveFetchRiskUniversesOutputSchema = zod.z.object({
|
|
5448
|
+
universes: zod.z.array(zod.z.unknown()),
|
|
5449
|
+
notes: zod.z.string(),
|
|
5450
|
+
network: zod.z.string().optional()
|
|
5451
|
+
});
|
|
5452
|
+
var mcpDeriveFetchPendingDepositsInputSchema = deriveWalletSchema;
|
|
5453
|
+
var mcpDeriveFetchPendingDepositsOutputSchema = zod.z.object({
|
|
5454
|
+
pending: zod.z.array(zod.z.unknown()),
|
|
5455
|
+
credited: zod.z.boolean(),
|
|
5456
|
+
notes: zod.z.string(),
|
|
5457
|
+
network: zod.z.string().optional()
|
|
5458
|
+
});
|
|
5459
|
+
var mcpDeriveFetchSubaccountsInputSchema = deriveWalletSchema;
|
|
5460
|
+
var mcpDeriveFetchSubaccountsOutputSchema = zod.z.object({
|
|
5461
|
+
wallet: zod.z.string(),
|
|
5462
|
+
subaccounts: zod.z.array(zod.z.number()),
|
|
5463
|
+
funded: zod.z.boolean(),
|
|
5464
|
+
notes: zod.z.string(),
|
|
5465
|
+
next: zod.z.array(zod.z.string()),
|
|
5466
|
+
network: zod.z.string().optional()
|
|
5467
|
+
});
|
|
5468
|
+
var deriveSubaccountInput = deriveWalletSchema.extend({
|
|
5469
|
+
subaccountId: agentCoercedIntSchema(zod.z.number().int().positive()).describe(
|
|
5470
|
+
"subaccountId from ctm_derive_fetch_subaccounts. Never 0. If that list is empty, deposit on Ethereum L1 first."
|
|
5471
|
+
)
|
|
5472
|
+
});
|
|
5473
|
+
var mcpDeriveFetchPortfolioInputSchema = deriveSubaccountInput;
|
|
5474
|
+
var mcpDeriveFetchPortfolioOutputSchema = zod.z.object({
|
|
5475
|
+
portfolio: zod.z.unknown(),
|
|
5476
|
+
subaccountId: zod.z.number(),
|
|
5477
|
+
wallet: zod.z.string(),
|
|
5478
|
+
network: zod.z.string().optional()
|
|
5479
|
+
});
|
|
5480
|
+
var mcpDeriveFetchPositionsInputSchema = deriveSubaccountInput;
|
|
5481
|
+
var mcpDeriveFetchPositionsOutputSchema = zod.z.object({
|
|
5482
|
+
positions: zod.z.array(zod.z.unknown()),
|
|
5483
|
+
subaccountId: zod.z.number(),
|
|
5484
|
+
wallet: zod.z.string(),
|
|
5485
|
+
network: zod.z.string().optional()
|
|
5486
|
+
});
|
|
5487
|
+
var mcpDeriveFetchOpenOrdersInputSchema = deriveSubaccountInput;
|
|
5488
|
+
var mcpDeriveFetchOpenOrdersOutputSchema = zod.z.object({
|
|
5489
|
+
orders: zod.z.array(zod.z.unknown()),
|
|
5490
|
+
subaccountId: zod.z.number(),
|
|
5491
|
+
wallet: zod.z.string(),
|
|
5492
|
+
network: zod.z.string().optional()
|
|
5493
|
+
});
|
|
5494
|
+
var deriveSubaccountIdField = agentCoercedIntSchema(zod.z.number().int().positive()).describe(
|
|
5495
|
+
"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."
|
|
5496
|
+
);
|
|
5497
|
+
var mcpDeriveDepositNewSubaccountInputSchema = mcpDeriveMultisignInput({
|
|
5498
|
+
protocolAsset: evmAddressSchema.describe("collaterals[].address from ctm_derive_fetch_risk_universes"),
|
|
5499
|
+
underlyingErc20: evmAddressSchema.describe("collaterals[].erc20.underlying_erc20 on Ethereum L1 (usually USDC)"),
|
|
5500
|
+
amountHuman: zod.z.string().min(1).describe("Deposit amount in underlying token units"),
|
|
5501
|
+
managerId: agentCoercedIntSchema(zod.z.number().int().positive()).describe("Risk-universe manager_id"),
|
|
5502
|
+
actionManager: evmAddressSchema.optional().describe("Override ACTION_MANAGER (required on mainnet until published)")
|
|
5503
|
+
});
|
|
5504
|
+
var mcpDeriveRegisterDepositAddressInputSchema = deriveFetchBaseSchema.extend({
|
|
5505
|
+
wallet: evmAddressSchema,
|
|
5506
|
+
managerId: agentCoercedIntSchema(zod.z.number().int().positive()).optional(),
|
|
5507
|
+
subaccountId: agentCoercedIntSchema(zod.z.number().int().nonnegative()).optional()
|
|
5508
|
+
});
|
|
5509
|
+
var mcpDeriveRegisterDepositAddressOutputSchema = zod.z.object({
|
|
5510
|
+
depositAddress: evmAddressSchema,
|
|
5511
|
+
wallet: evmAddressSchema,
|
|
5512
|
+
managerId: zod.z.number().int().nullable(),
|
|
5513
|
+
subaccountId: zod.z.number().int().nullable(),
|
|
5514
|
+
network: zod.z.string(),
|
|
5515
|
+
notes: zod.z.string()
|
|
5516
|
+
});
|
|
5517
|
+
var mcpDeriveDepositAddressTransferInputSchema = mcpDeriveMultisignInput({
|
|
5518
|
+
underlyingErc20: evmAddressSchema.describe("Ethereum L1 token to send (usually USDC)"),
|
|
5519
|
+
amountHuman: zod.z.string().min(1),
|
|
5520
|
+
depositAddress: evmAddressSchema.describe("From ctm_derive_register_deposit_address")
|
|
5521
|
+
});
|
|
5522
|
+
var mcpDeriveSocketDepositInputSchema = mcpDeriveMultisignInput({
|
|
5523
|
+
token: evmAddressSchema.describe("USDC / WETH / WBTC on this chain, or native 0x0 to wrap WETH"),
|
|
5524
|
+
amountHuman: zod.z.string().min(1),
|
|
5525
|
+
receiver: evmAddressSchema.optional().describe("Derive Chain receiver; defaults to executor")
|
|
5526
|
+
});
|
|
5527
|
+
var mcpDeriveHypeVaultDepositInputSchema = mcpDeriveMultisignInput({
|
|
5528
|
+
amountHuman: zod.z.string().min(1).describe("HYPE amount"),
|
|
5529
|
+
token: evmAddressSchema.optional().describe("Native 0x0 or WHYPE 0x555\u20265"),
|
|
5530
|
+
vault: evmAddressSchema.optional()
|
|
5531
|
+
});
|
|
5532
|
+
var mcpDerivePlaceOrderInputSchema = mcpDeriveMultisignInput({
|
|
5533
|
+
instrumentName: zod.z.string().min(1).describe("e.g. ETH-20260626-3000-C"),
|
|
5534
|
+
direction: zod.z.enum(["buy", "sell"]),
|
|
5535
|
+
amount: zod.z.string().min(1),
|
|
5536
|
+
limitPrice: zod.z.string().min(1),
|
|
5537
|
+
maxFee: zod.z.string().min(1),
|
|
5538
|
+
subaccountId: deriveSubaccountIdField,
|
|
5539
|
+
orderType: zod.z.enum(["limit", "market"]).optional(),
|
|
5540
|
+
timeInForce: zod.z.enum(["gtc", "ioc", "fok", "post_only"]).optional(),
|
|
5541
|
+
reduceOnly: zod.z.boolean().optional(),
|
|
5542
|
+
label: zod.z.string().optional(),
|
|
5543
|
+
ticketKind: zod.z.enum(["limit", "stop_limit", "twap"]).optional(),
|
|
5544
|
+
triggerPrice: zod.z.string().optional().describe("Required for stop_limit"),
|
|
5545
|
+
triggerType: zod.z.enum(["stoploss", "takeprofit"]).optional(),
|
|
5546
|
+
triggerPriceType: zod.z.enum(["mark", "index"]).optional(),
|
|
5547
|
+
algoDurationSec: agentCoercedIntSchema(zod.z.number().int().min(60)).optional().describe("Required for twap"),
|
|
5548
|
+
algoNumSlices: agentCoercedIntSchema(zod.z.number().int().min(2)).optional().describe("Required for twap")
|
|
5549
|
+
});
|
|
5550
|
+
var mcpDeriveReplaceOrderInputSchema = mcpDeriveMultisignInput({
|
|
5551
|
+
instrumentName: zod.z.string().min(1),
|
|
5552
|
+
direction: zod.z.enum(["buy", "sell"]),
|
|
5553
|
+
amount: zod.z.string().min(1),
|
|
5554
|
+
limitPrice: zod.z.string().min(1),
|
|
5555
|
+
maxFee: zod.z.string().min(1),
|
|
5556
|
+
subaccountId: deriveSubaccountIdField,
|
|
5557
|
+
orderType: zod.z.enum(["limit", "market"]).optional(),
|
|
5558
|
+
timeInForce: zod.z.enum(["gtc", "ioc", "fok", "post_only"]).optional(),
|
|
5559
|
+
reduceOnly: zod.z.boolean().optional(),
|
|
5560
|
+
label: zod.z.string().optional(),
|
|
5561
|
+
ticketKind: zod.z.enum(["limit", "stop_limit", "twap"]).optional(),
|
|
5562
|
+
triggerPrice: zod.z.string().optional(),
|
|
5563
|
+
triggerType: zod.z.enum(["stoploss", "takeprofit"]).optional(),
|
|
5564
|
+
triggerPriceType: zod.z.enum(["mark", "index"]).optional(),
|
|
5565
|
+
algoDurationSec: agentCoercedIntSchema(zod.z.number().int().min(60)).optional(),
|
|
5566
|
+
algoNumSlices: agentCoercedIntSchema(zod.z.number().int().min(2)).optional(),
|
|
5567
|
+
orderIdToCancel: zod.z.string().min(1).optional(),
|
|
5568
|
+
nonceToCancel: zod.z.string().min(1).optional()
|
|
5569
|
+
}).refine((d) => Boolean(d.orderIdToCancel) !== Boolean(d.nonceToCancel), {
|
|
5570
|
+
message: "Replace requires exactly one of orderIdToCancel or nonceToCancel."
|
|
5571
|
+
});
|
|
5572
|
+
var mcpDeriveCancelInputSchema = mcpDeriveMultisignInput({
|
|
5573
|
+
instrumentName: zod.z.string().min(1),
|
|
5574
|
+
orderId: zod.z.string().min(1).describe("order_id from ctm_derive_fetch_open_orders"),
|
|
5575
|
+
subaccountId: deriveSubaccountIdField
|
|
5576
|
+
});
|
|
5577
|
+
var mcpDeriveTransferSpotInputSchema = mcpDeriveMultisignInput({
|
|
5578
|
+
fromSubaccountId: deriveSubaccountIdField,
|
|
5579
|
+
toSubaccountId: agentCoercedIntSchema(zod.z.number().int().nonnegative()).describe(
|
|
5580
|
+
"Existing destination, or 0 to create an extra subaccount (requires newSubaccountManager)."
|
|
5581
|
+
),
|
|
5582
|
+
newSubaccountManager: agentCoercedIntSchema(zod.z.number().int().nonnegative()).describe(
|
|
5583
|
+
"Required when toSubaccountId is 0. Extra subaccounts only \u2014 first account is L1 deposit."
|
|
5584
|
+
),
|
|
5585
|
+
asset: evmAddressSchema.describe("Protocol asset address"),
|
|
5586
|
+
amount: zod.z.string().min(1),
|
|
5587
|
+
maxFeeUsd: zod.z.string().optional(),
|
|
5588
|
+
subId: agentCoercedIntSchema(zod.z.number().int().nonnegative()).optional()
|
|
5589
|
+
});
|
|
5137
5590
|
var mcpCctpFeeFieldsSchema = zod.z.object({
|
|
5138
5591
|
feeTierUsed: zod.z.enum(["low", "med", "high"]),
|
|
5139
5592
|
maxFee: zod.z.string().describe("Selected tier max fee in USDC base units (6 decimals)"),
|
|
@@ -5844,11 +6297,21 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
|
|
|
5844
6297
|
actionId: "hyperliquid.limitOrder",
|
|
5845
6298
|
protocolId: "hyperliquid",
|
|
5846
6299
|
chainCategory: "evm",
|
|
5847
|
-
description: "Create and submit mpc-auth multiSignRequest for a Hyperliquid limit/IoC order. Plain limit: CoreWriter (useCustomGas). When takeProfitTriggerPxHuman and/or
|
|
6300
|
+
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.",
|
|
5848
6301
|
prerequisites: ["keyGenId", "chainId 999 or 998", "coin", "limitPxHuman", "szHuman"],
|
|
5849
6302
|
handler: { importPath: "protocols/evm/hyperliquid", exportName: "buildEvmMultisignBodyHyperliquidLimitOrderBatch" },
|
|
5850
6303
|
inputZod: mcpHyperliquidLimitOrderInputSchema
|
|
5851
6304
|
}),
|
|
6305
|
+
defineProtocolMcpTool({
|
|
6306
|
+
name: "ctm_hyperliquid_build_trailing_stop_multisign",
|
|
6307
|
+
actionId: "hyperliquid.trailingStop",
|
|
6308
|
+
protocolId: "hyperliquid",
|
|
6309
|
+
chainCategory: "evm",
|
|
6310
|
+
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.",
|
|
6311
|
+
prerequisites: ["keyGenId", "chainId 999 or 998", "coin", "szHuman", "trailingOffsetHuman"],
|
|
6312
|
+
handler: { importPath: "protocols/evm/hyperliquid", exportName: "buildHyperliquidTrailingStopMultisign" },
|
|
6313
|
+
inputZod: mcpHyperliquidTrailingStopInputSchema
|
|
6314
|
+
}),
|
|
5852
6315
|
defineProtocolMcpTool({
|
|
5853
6316
|
name: "ctm_hyperliquid_build_close_multisign",
|
|
5854
6317
|
actionId: "hyperliquid.close",
|
|
@@ -6390,6 +6853,108 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
|
|
|
6390
6853
|
prerequisites: ["keyGenId", "chainId", "comet", "steps"],
|
|
6391
6854
|
handler: { importPath: "protocols/evm/compound-v3", exportName: "buildEvmMultisignBodyCompoundV3Bulker" },
|
|
6392
6855
|
inputZod: mcpCompoundV3BulkerInputSchema
|
|
6856
|
+
}),
|
|
6857
|
+
defineProtocolMcpTool({
|
|
6858
|
+
name: "ctm_derive_build_deposit_new_subaccount_multisign",
|
|
6859
|
+
actionId: "derive.depositNewSubaccount",
|
|
6860
|
+
protocolId: "derive",
|
|
6861
|
+
chainCategory: "evm",
|
|
6862
|
+
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.",
|
|
6863
|
+
prerequisites: [
|
|
6864
|
+
"chainId 1 or 11155111",
|
|
6865
|
+
"managerId + protocolAsset + underlyingErc20 from ctm_derive_fetch_risk_universes",
|
|
6866
|
+
"Ethereum L1 collateral (usually USDC)"
|
|
6867
|
+
],
|
|
6868
|
+
followUp: ["ctm_derive_fetch_pending_deposits", "ctm_derive_fetch_subaccounts"],
|
|
6869
|
+
handler: { importPath: "protocols/evm/derive", exportName: "buildDeriveDepositNewSubaccountMultisign" },
|
|
6870
|
+
inputZod: mcpDeriveDepositNewSubaccountInputSchema
|
|
6871
|
+
}),
|
|
6872
|
+
defineProtocolMcpTool({
|
|
6873
|
+
name: "ctm_derive_build_deposit_address_transfer_multisign",
|
|
6874
|
+
actionId: "derive.depositAddressTransfer",
|
|
6875
|
+
protocolId: "derive",
|
|
6876
|
+
chainCategory: "evm",
|
|
6877
|
+
description: "Ethereum L1 ERC-20 transfer to a registered Derive deposit address (standard / keeper sweep). Call ctm_derive_register_deposit_address first. useCustomGas.",
|
|
6878
|
+
prerequisites: ["chainId 1 or 11155111", "depositAddress from ctm_derive_register_deposit_address"],
|
|
6879
|
+
followUp: ["ctm_derive_fetch_pending_deposits", "ctm_derive_fetch_subaccounts"],
|
|
6880
|
+
handler: { importPath: "protocols/evm/derive", exportName: "buildDeriveDepositAddressTransferMultisign" },
|
|
6881
|
+
inputZod: mcpDeriveDepositAddressTransferInputSchema
|
|
6882
|
+
}),
|
|
6883
|
+
defineProtocolMcpTool({
|
|
6884
|
+
name: "ctm_derive_build_socket_deposit_multisign",
|
|
6885
|
+
actionId: "derive.socketDeposit",
|
|
6886
|
+
protocolId: "derive",
|
|
6887
|
+
chainCategory: "evm",
|
|
6888
|
+
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.",
|
|
6889
|
+
prerequisites: ["chainId 1 / 10 / 8453 / 42161", "token + amountHuman"],
|
|
6890
|
+
followUp: ["ctm_derive_fetch_pending_deposits", "ctm_derive_fetch_subaccounts"],
|
|
6891
|
+
handler: { importPath: "protocols/evm/derive", exportName: "buildDeriveSocketDepositMultisign" },
|
|
6892
|
+
inputZod: mcpDeriveSocketDepositInputSchema
|
|
6893
|
+
}),
|
|
6894
|
+
defineProtocolMcpTool({
|
|
6895
|
+
name: "ctm_derive_build_hype_vault_deposit_multisign",
|
|
6896
|
+
actionId: "derive.hypeVaultDeposit",
|
|
6897
|
+
protocolId: "derive",
|
|
6898
|
+
chainCategory: "evm",
|
|
6899
|
+
description: "HyperEVM (999) HYPE vault: wrap native HYPE to WHYPE if needed, approve, deposit. First credit creates a Standard Margin subaccount. useCustomGas.",
|
|
6900
|
+
prerequisites: ["chainId 999", "amountHuman"],
|
|
6901
|
+
followUp: ["ctm_derive_fetch_pending_deposits", "ctm_derive_fetch_subaccounts"],
|
|
6902
|
+
handler: { importPath: "protocols/evm/derive", exportName: "buildDeriveHypeVaultDepositMultisign" },
|
|
6903
|
+
inputZod: mcpDeriveHypeVaultDepositInputSchema
|
|
6904
|
+
}),
|
|
6905
|
+
defineProtocolMcpTool({
|
|
6906
|
+
name: "ctm_derive_build_place_order_multisign",
|
|
6907
|
+
actionId: "derive.placeOrder",
|
|
6908
|
+
protocolId: "derive",
|
|
6909
|
+
chainCategory: "evm",
|
|
6910
|
+
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.",
|
|
6911
|
+
prerequisites: [
|
|
6912
|
+
"subaccountId from ctm_derive_fetch_subaccounts",
|
|
6913
|
+
"funded Derive collateral (L1 / Socket / HYPE vault)",
|
|
6914
|
+
"instrumentName, direction, amount, limitPrice, maxFee"
|
|
6915
|
+
],
|
|
6916
|
+
handler: { importPath: "protocols/evm/derive", exportName: "buildDerivePlaceOrderMultisign" },
|
|
6917
|
+
inputZod: mcpDerivePlaceOrderInputSchema
|
|
6918
|
+
}),
|
|
6919
|
+
defineProtocolMcpTool({
|
|
6920
|
+
name: "ctm_derive_build_replace_order_multisign",
|
|
6921
|
+
actionId: "derive.replaceOrder",
|
|
6922
|
+
protocolId: "derive",
|
|
6923
|
+
chainCategory: "evm",
|
|
6924
|
+
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.",
|
|
6925
|
+
prerequisites: [
|
|
6926
|
+
"subaccountId from ctm_derive_fetch_subaccounts",
|
|
6927
|
+
"funded Derive collateral (L1 / Socket / HYPE vault)",
|
|
6928
|
+
"orderIdToCancel or nonceToCancel"
|
|
6929
|
+
],
|
|
6930
|
+
handler: { importPath: "protocols/evm/derive", exportName: "buildDeriveReplaceOrderMultisign" },
|
|
6931
|
+
inputZod: mcpDeriveReplaceOrderInputSchema
|
|
6932
|
+
}),
|
|
6933
|
+
defineProtocolMcpTool({
|
|
6934
|
+
name: "ctm_derive_build_cancel_multisign",
|
|
6935
|
+
actionId: "derive.cancel",
|
|
6936
|
+
protocolId: "derive",
|
|
6937
|
+
chainCategory: "evm",
|
|
6938
|
+
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.",
|
|
6939
|
+
prerequisites: [
|
|
6940
|
+
"subaccountId from ctm_derive_fetch_subaccounts",
|
|
6941
|
+
"orderId from ctm_derive_fetch_open_orders"
|
|
6942
|
+
],
|
|
6943
|
+
handler: { importPath: "protocols/evm/derive", exportName: "buildDeriveCancelMultisign" },
|
|
6944
|
+
inputZod: mcpDeriveCancelInputSchema
|
|
6945
|
+
}),
|
|
6946
|
+
defineProtocolMcpTool({
|
|
6947
|
+
name: "ctm_derive_build_transfer_spot_multisign",
|
|
6948
|
+
actionId: "derive.transferSpot",
|
|
6949
|
+
protocolId: "derive",
|
|
6950
|
+
chainCategory: "evm",
|
|
6951
|
+
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.",
|
|
6952
|
+
prerequisites: [
|
|
6953
|
+
"fromSubaccountId from ctm_derive_fetch_subaccounts",
|
|
6954
|
+
"funded Derive collateral (L1 / Socket / HYPE vault)"
|
|
6955
|
+
],
|
|
6956
|
+
handler: { importPath: "protocols/evm/derive", exportName: "buildDeriveTransferSpotMultisign" },
|
|
6957
|
+
inputZod: mcpDeriveTransferSpotInputSchema
|
|
6393
6958
|
})
|
|
6394
6959
|
];
|
|
6395
6960
|
|
|
@@ -7851,9 +8416,10 @@ var CORE_MCP_TOOL_DEFINITIONS = [
|
|
|
7851
8416
|
actionId: "continuum-dao.fetch-proposal-state",
|
|
7852
8417
|
protocolId: "continuum-dao",
|
|
7853
8418
|
chainCategory: "evm",
|
|
7854
|
-
description: "Read ContinuumDAO.state and proposalVotes. `proposalId` may be a backend catalog id (0, -1, -2, \u2026) \u2014 those resolve to the row\u2019s onchainId hash and governorAddress before the Governor call. Catalog id 0 is not Governor proposal 0. Pass the row\u2019s governorAddress when set: ids -2 and -1 live on the superseded Linea governor 0x4800F9f1dC1b6daCA841B71E0531F547D374168E.",
|
|
8419
|
+
description: "Read ContinuumDAO.state and proposalVotes. `proposalId` may be a backend catalog id (0, -1, -2, \u2026) \u2014 those resolve to the row\u2019s onchainId hash and governorAddress before the Governor call. Catalog id 0 is not Governor proposal 0. Pass the row\u2019s governorAddress when set: ids -2 and -1 live on the superseded Linea governor 0x4800F9f1dC1b6daCA841B71E0531F547D374168E. After this, offer ctm_continuum_dao_fetch_proposal_votes to see who voted and how.",
|
|
7855
8420
|
prerequisites: ["rpcUrl", "proposalId", "governor"],
|
|
7856
8421
|
followUp: [
|
|
8422
|
+
"ctm_continuum_dao_fetch_proposal_votes",
|
|
7857
8423
|
"ctm_continuum_dao_build_cast_vote_bravo_multisign",
|
|
7858
8424
|
"ctm_continuum_dao_build_execute_multisign"
|
|
7859
8425
|
],
|
|
@@ -7866,9 +8432,13 @@ var CORE_MCP_TOOL_DEFINITIONS = [
|
|
|
7866
8432
|
actionId: "continuum-dao.fetch-proposals",
|
|
7867
8433
|
protocolId: "continuum-dao",
|
|
7868
8434
|
chainCategory: "evm",
|
|
7869
|
-
description: "List proposals from the public ContinuumDAO backend (POST /proposals). start/end are catalog id indexes (end exclusive), not offsets, and may be negative: the superseded Linea governor 0x4800F9f1\u2026 is stored as ids -2 and -1 so the current contract can start at 0. Omit start/end to fetch the full catalog (minIndex..maxIndex). Do not use this to answer \u201Cwhat is live now\u201D \u2014 use ctm_continuum_dao_fetch_live_proposals so on-chain state is overlaid.",
|
|
8435
|
+
description: "List proposals from the public ContinuumDAO backend (POST /proposals). start/end are catalog id indexes (end exclusive), not offsets, and may be negative: the superseded Linea governor 0x4800F9f1\u2026 is stored as ids -2 and -1 so the current contract can start at 0. Omit start/end to fetch the full catalog (minIndex..maxIndex). Do not use this to answer \u201Cwhat is live now\u201D \u2014 use ctm_continuum_dao_fetch_live_proposals so on-chain state is overlaid. After naming a proposal, offer ctm_continuum_dao_fetch_proposal_votes so the operator can see who voted and how.",
|
|
7870
8436
|
prerequisites: [],
|
|
7871
|
-
followUp: [
|
|
8437
|
+
followUp: [
|
|
8438
|
+
"ctm_continuum_dao_fetch_live_proposals",
|
|
8439
|
+
"ctm_continuum_dao_fetch_proposal",
|
|
8440
|
+
"ctm_continuum_dao_fetch_proposal_votes"
|
|
8441
|
+
],
|
|
7872
8442
|
handler: { importPath: "protocols/evm/continuum-dao", exportName: "continuumDaoFetchProposals" },
|
|
7873
8443
|
inputZod: mcpContinuumDaoFetchProposalsInputSchema,
|
|
7874
8444
|
outputZod: mcpContinuumDaoFetchProposalsOutputSchema
|
|
@@ -7878,9 +8448,13 @@ var CORE_MCP_TOOL_DEFINITIONS = [
|
|
|
7878
8448
|
actionId: "continuum-dao.fetch-proposal",
|
|
7879
8449
|
protocolId: "continuum-dao",
|
|
7880
8450
|
chainCategory: "evm",
|
|
7881
|
-
description: "Fetch one proposal from the public ContinuumDAO backend (GET /proposals/:id). Id may be negative: -2 and -1 are the two proposals from the superseded Linea governor 0x4800F9f1dC1b6daCA841B71E0531F547D374168E.",
|
|
8451
|
+
description: "Fetch one proposal from the public ContinuumDAO backend (GET /proposals/:id). Id may be negative: -2 and -1 are the two proposals from the superseded Linea governor 0x4800F9f1dC1b6daCA841B71E0531F547D374168E. After this, offer ctm_continuum_dao_fetch_proposal_votes so the operator can see who voted and how.",
|
|
7882
8452
|
prerequisites: ["id"],
|
|
7883
|
-
followUp: [
|
|
8453
|
+
followUp: [
|
|
8454
|
+
"ctm_continuum_dao_explain_proposal",
|
|
8455
|
+
"ctm_continuum_dao_fetch_proposal_state",
|
|
8456
|
+
"ctm_continuum_dao_fetch_proposal_votes"
|
|
8457
|
+
],
|
|
7884
8458
|
handler: { importPath: "protocols/evm/continuum-dao", exportName: "continuumDaoFetchProposal" },
|
|
7885
8459
|
inputZod: mcpContinuumDaoFetchProposalInputSchema,
|
|
7886
8460
|
outputZod: mcpContinuumDaoFetchProposalOutputSchema
|
|
@@ -7890,11 +8464,12 @@ var CORE_MCP_TOOL_DEFINITIONS = [
|
|
|
7890
8464
|
actionId: "continuum-dao.fetch-live-proposals",
|
|
7891
8465
|
protocolId: "continuum-dao",
|
|
7892
8466
|
chainCategory: "evm",
|
|
7893
|
-
description: "Answer \u201Cwhat proposals are live now?\u201D. Lists the backend catalog (including negative ids on the superseded Linea governor) and overlays ContinuumDAO.state using each row\u2019s governorAddress. Rows set `committeeProposer` when the proposer is a ContinuumDAO Committee address \u2014 say Committee next to those titles. live = Active (voting). pending = Pending. readyToExecute = Succeeded (execute from here; no queue). recentlyCompleted = Canceled/Defeated/Expired/Executed in this scan. Requires Linea chainId + rpcUrl + governor for on-chain overlay. Read the `note` field aloud.",
|
|
8467
|
+
description: "Answer \u201Cwhat proposals are live now?\u201D. Lists the backend catalog (including negative ids on the superseded Linea governor) and overlays ContinuumDAO.state using each row\u2019s governorAddress. Rows set `committeeProposer` when the proposer is a ContinuumDAO Committee address \u2014 say Committee next to those titles. live = Active (voting). pending = Pending. readyToExecute = Succeeded (execute from here; no queue). recentlyCompleted = Canceled/Defeated/Expired/Executed in this scan. Requires Linea chainId + rpcUrl + governor for on-chain overlay. Read the `note` field aloud. Then offer ctm_continuum_dao_fetch_proposal_votes for any named proposal so the operator can see who voted and how.",
|
|
7894
8468
|
prerequisites: ["load_defi_protocol continuum-dao", "Linea chainId 59144 or 59141", "rpcUrl", "governor if constant is zero"],
|
|
7895
8469
|
followUp: [
|
|
7896
8470
|
"ctm_continuum_dao_explain_proposal",
|
|
7897
8471
|
"ctm_continuum_dao_fetch_proposal",
|
|
8472
|
+
"ctm_continuum_dao_fetch_proposal_votes",
|
|
7898
8473
|
"ctm_continuum_dao_build_cast_vote_bravo_multisign",
|
|
7899
8474
|
"ctm_continuum_dao_build_execute_multisign"
|
|
7900
8475
|
],
|
|
@@ -7907,13 +8482,32 @@ var CORE_MCP_TOOL_DEFINITIONS = [
|
|
|
7907
8482
|
actionId: "continuum-dao.explain-proposal",
|
|
7908
8483
|
protocolId: "continuum-dao",
|
|
7909
8484
|
chainCategory: "evm",
|
|
7910
|
-
description: "Deconstruct a ContinuumDAO proposal for the operator. Walks every user action (Bravo) or every option (Delta), labels encoder no-ops as signaling, flags C3 / value / approve / unknown signatures, and checks the forum thread section against the proposal type. `network.c3governor` is always present; an action is C3-remote only when network.name is not Linea (home chain 59144 / 59141). `committeeProposer` is true when the proposer is a ContinuumDAO Committee address \u2014 say that aloud. Read the `briefing` field aloud. Does not vote. For a policy recommendation load the mpc-config continuum-dao-vote-policy skill.",
|
|
8485
|
+
description: "Deconstruct a ContinuumDAO proposal for the operator. Walks every user action (Bravo) or every option (Delta), labels encoder no-ops as signaling, flags C3 / value / approve / unknown signatures, and checks the forum thread section against the proposal type. `network.c3governor` is always present; an action is C3-remote only when network.name is not Linea (home chain 59144 / 59141). `committeeProposer` is true when the proposer is a ContinuumDAO Committee address \u2014 say that aloud. Read the `briefing` field aloud. Then offer ctm_continuum_dao_fetch_proposal_votes so the operator can see who voted and how. Does not vote. For a policy recommendation load the mpc-config continuum-dao-vote-policy skill.",
|
|
7911
8486
|
prerequisites: ["id (backend) or onchainId"],
|
|
7912
|
-
followUp: [
|
|
8487
|
+
followUp: [
|
|
8488
|
+
"ctm_continuum_dao_fetch_proposal_votes",
|
|
8489
|
+
"ctm_continuum_dao_fetch_proposal_state",
|
|
8490
|
+
"ctm_continuum_dao_forum_fetch_thread"
|
|
8491
|
+
],
|
|
7913
8492
|
handler: { importPath: "protocols/evm/continuum-dao", exportName: "continuumDaoExplainProposal" },
|
|
7914
8493
|
inputZod: mcpContinuumDaoExplainProposalInputSchema,
|
|
7915
8494
|
outputZod: mcpContinuumDaoExplainProposalOutputSchema
|
|
7916
8495
|
}),
|
|
8496
|
+
defineMcpTool({
|
|
8497
|
+
name: "ctm_continuum_dao_fetch_proposal_votes",
|
|
8498
|
+
actionId: "continuum-dao.fetch-proposal-votes",
|
|
8499
|
+
protocolId: "continuum-dao",
|
|
8500
|
+
chainCategory: "evm",
|
|
8501
|
+
description: "Who voted on a ContinuumDAO proposal and how. Reads Governor VoteCast / VoteCastWithParams for live or past proposals. Each voter includes attached (NodeProperties.attachedTokenId after attachNodeFor) and, when they entered it at attach, nodeInfo (forum handle, VPS, DID, email, IP). Do not read email or IP aloud unless the operator asks. `proposalId` may be a backend catalog id (0, -1, -2, \u2026) or the on-chain hash. Bravo rows have For/Against/Abstain; Delta rows include option weights (last is NOTA). Offer this after listing or explaining a proposal. Linea only. Does not vote.",
|
|
8502
|
+
prerequisites: ["rpcUrl", "proposalId", "governor if constant is zero"],
|
|
8503
|
+
followUp: [
|
|
8504
|
+
"ctm_continuum_dao_fetch_proposal_state",
|
|
8505
|
+
"ctm_continuum_dao_explain_proposal"
|
|
8506
|
+
],
|
|
8507
|
+
handler: { importPath: "protocols/evm/continuum-dao", exportName: "continuumDaoFetchProposalVotes" },
|
|
8508
|
+
inputZod: mcpContinuumDaoFetchProposalVotesInputSchema,
|
|
8509
|
+
outputZod: mcpContinuumDaoFetchProposalVotesOutputSchema
|
|
8510
|
+
}),
|
|
7917
8511
|
defineMcpTool({
|
|
7918
8512
|
name: "ctm_continuum_dao_register_proposal",
|
|
7919
8513
|
actionId: "continuum-dao.register-proposal",
|
|
@@ -8641,6 +9235,179 @@ var CORE_MCP_TOOL_DEFINITIONS = [
|
|
|
8641
9235
|
],
|
|
8642
9236
|
handler: { importPath: "protocols/evm/pendle", exportName: "buildEvmMultisignBodyPendleRedeemRewardsBatch" },
|
|
8643
9237
|
inputZod: mcpPendleBuildRedeemRewardsMultisignInputSchema
|
|
9238
|
+
}),
|
|
9239
|
+
defineMcpTool({
|
|
9240
|
+
name: "ctm_derive_fetch_currencies",
|
|
9241
|
+
actionId: "derive.fetch-currencies",
|
|
9242
|
+
protocolId: "derive",
|
|
9243
|
+
chainCategory: "evm",
|
|
9244
|
+
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.",
|
|
9245
|
+
prerequisites: ["load_defi_protocol derive"],
|
|
9246
|
+
followUp: ["ctm_derive_fetch_option_chain", "ctm_derive_fetch_tickers", "ctm_derive_search_instruments"],
|
|
9247
|
+
handler: { importPath: "protocols/evm/derive", exportName: "deriveFetchCurrenciesSummary" },
|
|
9248
|
+
inputZod: mcpDeriveFetchCurrenciesInputSchema,
|
|
9249
|
+
outputZod: mcpDeriveFetchCurrenciesOutputSchema
|
|
9250
|
+
}),
|
|
9251
|
+
defineMcpTool({
|
|
9252
|
+
name: "ctm_derive_fetch_option_chain",
|
|
9253
|
+
actionId: "derive.fetch-option-chain",
|
|
9254
|
+
protocolId: "derive",
|
|
9255
|
+
chainCategory: "evm",
|
|
9256
|
+
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.",
|
|
9257
|
+
prerequisites: ["currency e.g. ETH"],
|
|
9258
|
+
followUp: ["ctm_derive_fetch_tickers", "ctm_derive_search_instruments", "ctm_derive_fetch_market_snapshot"],
|
|
9259
|
+
handler: { importPath: "protocols/evm/derive", exportName: "deriveFetchOptionChainAgentSummary" },
|
|
9260
|
+
inputZod: mcpDeriveFetchOptionChainInputSchema,
|
|
9261
|
+
outputZod: mcpDeriveFetchOptionChainOutputSchema
|
|
9262
|
+
}),
|
|
9263
|
+
defineMcpTool({
|
|
9264
|
+
name: "ctm_derive_fetch_tickers",
|
|
9265
|
+
actionId: "derive.fetch-tickers",
|
|
9266
|
+
protocolId: "derive",
|
|
9267
|
+
chainCategory: "evm",
|
|
9268
|
+
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.',
|
|
9269
|
+
prerequisites: ["currency", "expiryDate YYYYMMDD (string or number)"],
|
|
9270
|
+
followUp: ["ctm_derive_fetch_market_snapshot", "ctm_derive_order_quote", "ctm_derive_build_place_order_multisign"],
|
|
9271
|
+
handler: { importPath: "protocols/evm/derive", exportName: "deriveFetchTickersSummary" },
|
|
9272
|
+
inputZod: mcpDeriveFetchTickersInputSchema,
|
|
9273
|
+
outputZod: mcpDeriveFetchTickersOutputSchema
|
|
9274
|
+
}),
|
|
9275
|
+
defineMcpTool({
|
|
9276
|
+
name: "ctm_derive_search_instruments",
|
|
9277
|
+
actionId: "derive.search-instruments",
|
|
9278
|
+
protocolId: "derive",
|
|
9279
|
+
chainCategory: "evm",
|
|
9280
|
+
description: "Search Derive option instrument names by strike, expiry, or C/P suffix.",
|
|
9281
|
+
prerequisites: ["currency", "query"],
|
|
9282
|
+
followUp: ["ctm_derive_fetch_market_snapshot", "ctm_derive_build_place_order_multisign"],
|
|
9283
|
+
handler: { importPath: "protocols/evm/derive", exportName: "deriveSearchInstrumentsSummary" },
|
|
9284
|
+
inputZod: mcpDeriveSearchInstrumentsInputSchema,
|
|
9285
|
+
outputZod: mcpDeriveSearchInstrumentsOutputSchema
|
|
9286
|
+
}),
|
|
9287
|
+
defineMcpTool({
|
|
9288
|
+
name: "ctm_derive_fetch_market_snapshot",
|
|
9289
|
+
actionId: "derive.fetch-market-snapshot",
|
|
9290
|
+
protocolId: "derive",
|
|
9291
|
+
chainCategory: "evm",
|
|
9292
|
+
description: "Live Derive ticker: mark, index, bid/ask, greeks. Throws if no live price.",
|
|
9293
|
+
prerequisites: ["instrumentName from fetch_option_chain"],
|
|
9294
|
+
followUp: ["ctm_derive_fetch_ohlcv", "ctm_derive_order_quote", "ctm_derive_build_place_order_multisign"],
|
|
9295
|
+
handler: { importPath: "protocols/evm/derive", exportName: "deriveFetchMarketSnapshotSummary" },
|
|
9296
|
+
inputZod: mcpDeriveFetchMarketSnapshotInputSchema,
|
|
9297
|
+
outputZod: mcpDeriveFetchMarketSnapshotOutputSchema
|
|
9298
|
+
}),
|
|
9299
|
+
defineMcpTool({
|
|
9300
|
+
name: "ctm_derive_fetch_ohlcv",
|
|
9301
|
+
actionId: "derive.fetch-ohlcv",
|
|
9302
|
+
protocolId: "derive",
|
|
9303
|
+
chainCategory: "evm",
|
|
9304
|
+
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.',
|
|
9305
|
+
prerequisites: ["instrumentName or currency"],
|
|
9306
|
+
followUp: ["continuum__prepare_chart_from_rows", "ctm_derive_fetch_market_snapshot"],
|
|
9307
|
+
handler: { importPath: "protocols/evm/derive", exportName: "deriveFetchOhlcvSummary" },
|
|
9308
|
+
inputZod: mcpDeriveFetchOhlcvInputSchema,
|
|
9309
|
+
outputZod: mcpDeriveFetchOhlcvOutputSchema
|
|
9310
|
+
}),
|
|
9311
|
+
defineMcpTool({
|
|
9312
|
+
name: "ctm_derive_order_quote",
|
|
9313
|
+
actionId: "derive.order-quote",
|
|
9314
|
+
protocolId: "derive",
|
|
9315
|
+
chainCategory: "evm",
|
|
9316
|
+
description: "Dry-run Derive fill / margin preview (public/order_quote).",
|
|
9317
|
+
prerequisites: ["instrumentName", "direction", "amount", "limitPrice"],
|
|
9318
|
+
followUp: ["ctm_derive_build_place_order_multisign"],
|
|
9319
|
+
handler: { importPath: "protocols/evm/derive", exportName: "deriveOrderQuoteSummary" },
|
|
9320
|
+
inputZod: mcpDeriveOrderQuoteInputSchema,
|
|
9321
|
+
outputZod: mcpDeriveOrderQuoteOutputSchema
|
|
9322
|
+
}),
|
|
9323
|
+
defineMcpTool({
|
|
9324
|
+
name: "ctm_derive_fetch_risk_universes",
|
|
9325
|
+
actionId: "derive.fetch-risk-universes",
|
|
9326
|
+
protocolId: "derive",
|
|
9327
|
+
chainCategory: "evm",
|
|
9328
|
+
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).",
|
|
9329
|
+
prerequisites: ["activate_tool_group defi:derive:options"],
|
|
9330
|
+
followUp: [
|
|
9331
|
+
"ctm_derive_build_deposit_new_subaccount_multisign",
|
|
9332
|
+
"ctm_derive_register_deposit_address",
|
|
9333
|
+
"ctm_derive_build_socket_deposit_multisign",
|
|
9334
|
+
"ctm_derive_build_hype_vault_deposit_multisign"
|
|
9335
|
+
],
|
|
9336
|
+
handler: { importPath: "protocols/evm/derive", exportName: "deriveFetchRiskUniversesSummary" },
|
|
9337
|
+
inputZod: mcpDeriveFetchRiskUniversesInputSchema,
|
|
9338
|
+
outputZod: mcpDeriveFetchRiskUniversesOutputSchema
|
|
9339
|
+
}),
|
|
9340
|
+
defineMcpTool({
|
|
9341
|
+
name: "ctm_derive_fetch_pending_deposits",
|
|
9342
|
+
actionId: "derive.fetch-pending-deposits",
|
|
9343
|
+
protocolId: "derive",
|
|
9344
|
+
chainCategory: "evm",
|
|
9345
|
+
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.",
|
|
9346
|
+
prerequisites: ["wallet / executorAddress"],
|
|
9347
|
+
followUp: ["ctm_derive_fetch_subaccounts"],
|
|
9348
|
+
handler: { importPath: "protocols/evm/derive", exportName: "deriveFetchPendingDepositsSummary" },
|
|
9349
|
+
inputZod: mcpDeriveFetchPendingDepositsInputSchema,
|
|
9350
|
+
outputZod: mcpDeriveFetchPendingDepositsOutputSchema
|
|
9351
|
+
}),
|
|
9352
|
+
defineMcpTool({
|
|
9353
|
+
name: "ctm_derive_register_deposit_address",
|
|
9354
|
+
actionId: "derive.register-deposit-address",
|
|
9355
|
+
protocolId: "derive",
|
|
9356
|
+
chainCategory: "evm",
|
|
9357
|
+
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.",
|
|
9358
|
+
prerequisites: ["wallet", "managerId (new subaccount) or subaccountId (existing)"],
|
|
9359
|
+
followUp: ["ctm_derive_build_deposit_address_transfer_multisign", "ctm_derive_fetch_pending_deposits"],
|
|
9360
|
+
handler: { importPath: "protocols/evm/derive", exportName: "deriveRegisterDepositAddress" },
|
|
9361
|
+
inputZod: mcpDeriveRegisterDepositAddressInputSchema,
|
|
9362
|
+
outputZod: mcpDeriveRegisterDepositAddressOutputSchema
|
|
9363
|
+
}),
|
|
9364
|
+
defineMcpTool({
|
|
9365
|
+
name: "ctm_derive_fetch_subaccounts",
|
|
9366
|
+
actionId: "derive.fetch-subaccounts",
|
|
9367
|
+
protocolId: "derive",
|
|
9368
|
+
chainCategory: "evm",
|
|
9369
|
+
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).",
|
|
9370
|
+
prerequisites: ["wallet / executorAddress", "node-cached EIP-191 login"],
|
|
9371
|
+
followUp: ["ctm_derive_fetch_portfolio", "ctm_derive_build_place_order_multisign"],
|
|
9372
|
+
handler: { importPath: "protocols/evm/derive", exportName: "deriveFetchSubaccountsSummary" },
|
|
9373
|
+
inputZod: mcpDeriveFetchSubaccountsInputSchema,
|
|
9374
|
+
outputZod: mcpDeriveFetchSubaccountsOutputSchema
|
|
9375
|
+
}),
|
|
9376
|
+
defineMcpTool({
|
|
9377
|
+
name: "ctm_derive_fetch_portfolio",
|
|
9378
|
+
actionId: "derive.fetch-portfolio",
|
|
9379
|
+
protocolId: "derive",
|
|
9380
|
+
chainCategory: "evm",
|
|
9381
|
+
description: "Derive private/get_subaccount portfolio for a funded subaccountId.",
|
|
9382
|
+
prerequisites: ["subaccountId from ctm_derive_fetch_subaccounts"],
|
|
9383
|
+
followUp: ["ctm_derive_fetch_positions", "ctm_derive_build_place_order_multisign"],
|
|
9384
|
+
handler: { importPath: "protocols/evm/derive", exportName: "deriveFetchPortfolioSummary" },
|
|
9385
|
+
inputZod: mcpDeriveFetchPortfolioInputSchema,
|
|
9386
|
+
outputZod: mcpDeriveFetchPortfolioOutputSchema
|
|
9387
|
+
}),
|
|
9388
|
+
defineMcpTool({
|
|
9389
|
+
name: "ctm_derive_fetch_positions",
|
|
9390
|
+
actionId: "derive.fetch-positions",
|
|
9391
|
+
protocolId: "derive",
|
|
9392
|
+
chainCategory: "evm",
|
|
9393
|
+
description: "Open Derive option positions for a subaccountId from fetch_subaccounts.",
|
|
9394
|
+
prerequisites: ["subaccountId from ctm_derive_fetch_subaccounts"],
|
|
9395
|
+
followUp: ["ctm_derive_build_place_order_multisign"],
|
|
9396
|
+
handler: { importPath: "protocols/evm/derive", exportName: "deriveFetchPositionsSummary" },
|
|
9397
|
+
inputZod: mcpDeriveFetchPositionsInputSchema,
|
|
9398
|
+
outputZod: mcpDeriveFetchPositionsOutputSchema
|
|
9399
|
+
}),
|
|
9400
|
+
defineMcpTool({
|
|
9401
|
+
name: "ctm_derive_fetch_open_orders",
|
|
9402
|
+
actionId: "derive.fetch-open-orders",
|
|
9403
|
+
protocolId: "derive",
|
|
9404
|
+
chainCategory: "evm",
|
|
9405
|
+
description: "Open Derive orders for a subaccountId. Follow with cancel/replace.",
|
|
9406
|
+
prerequisites: ["subaccountId from ctm_derive_fetch_subaccounts"],
|
|
9407
|
+
followUp: ["ctm_derive_build_cancel_multisign", "ctm_derive_build_replace_order_multisign"],
|
|
9408
|
+
handler: { importPath: "protocols/evm/derive", exportName: "deriveFetchOpenOrdersSummary" },
|
|
9409
|
+
inputZod: mcpDeriveFetchOpenOrdersInputSchema,
|
|
9410
|
+
outputZod: mcpDeriveFetchOpenOrdersOutputSchema
|
|
8644
9411
|
})
|
|
8645
9412
|
];
|
|
8646
9413
|
var MCP_TOOL_DEFINITIONS = [
|
|
@@ -9534,7 +10301,26 @@ var hyperliquidProtocolModule = {
|
|
|
9534
10301
|
dex: { type: "string", required: false, description: "HIP-3 dex name when applicable" },
|
|
9535
10302
|
takeProfitTriggerPxHuman: { type: "string", required: false, description: "TP trigger \u2014 enables L1 bracket with SL" },
|
|
9536
10303
|
stopLossTriggerPxHuman: { type: "string", required: false, description: "SL trigger \u2014 enables L1 bracket with TP" },
|
|
9537
|
-
tpslExecMode: { type: "string", required: false, description: "limit_at_trigger (default) or market" }
|
|
10304
|
+
tpslExecMode: { type: "string", required: false, description: "limit_at_trigger (default) or market" },
|
|
10305
|
+
trailingOffsetHuman: { type: "string", required: false, description: "Trailing retracement \u2014 EIP-712 trailingStop (cannot combine with SL)" },
|
|
10306
|
+
trailingOffsetType: { type: "string", required: false, description: "price or percentage" },
|
|
10307
|
+
trailingActivationPxHuman: { type: "string", required: false, description: "Optional activation mark price" }
|
|
10308
|
+
}
|
|
10309
|
+
},
|
|
10310
|
+
{
|
|
10311
|
+
id: "hyperliquid.trailingStop",
|
|
10312
|
+
protocolId: HYPERLIQUID_PROTOCOL_ID,
|
|
10313
|
+
chainCategory: "evm",
|
|
10314
|
+
description: "Place a Hyperliquid perp trailing stop via L1 trailingStop action (EIP-712 /exchange)",
|
|
10315
|
+
commonParams: ["keyGen", "purposeText"],
|
|
10316
|
+
params: {
|
|
10317
|
+
coin: { type: "string", required: true, description: "Perp coin" },
|
|
10318
|
+
isBuy: { type: "boolean", required: true, description: "false closes a long / opens a short" },
|
|
10319
|
+
szHuman: { type: "string", required: true, description: "Size in coin units" },
|
|
10320
|
+
trailingOffsetHuman: { type: "string", required: true, description: "Retracement distance or percent" },
|
|
10321
|
+
trailingOffsetType: { type: "string", required: false, description: "price or percentage (default)" },
|
|
10322
|
+
trailingActivationPxHuman: { type: "string", required: false, description: "Optional activation mark price" },
|
|
10323
|
+
reduceOnly: { type: "boolean", required: false, description: "true (default) reduces a position" }
|
|
9538
10324
|
}
|
|
9539
10325
|
},
|
|
9540
10326
|
{
|
|
@@ -10488,6 +11274,7 @@ var continuumDaoProtocolModule = {
|
|
|
10488
11274
|
{ id: "continuum-dao.cancel", protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: "evm", description: "Cancel a proposal", commonParams: ["keyGen", "purposeText", "useCustomGas"], params: { proposalId: { type: "string", required: true, description: "Catalog id or governor proposal hash" } } },
|
|
10489
11275
|
{ id: "continuum-dao.fetch-live-proposals", protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: "evm", description: "List live/pending/succeeded proposals with on-chain state overlay", commonParams: [], params: { chainId: { type: "number", required: false, description: "Linea chain id" }, rpcUrl: { type: "string", required: false, description: "Linea RPC for state overlay" } } },
|
|
10490
11276
|
{ id: "continuum-dao.explain-proposal", protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: "evm", description: "Deconstruct a proposal into a readable briefing (actions, C3, no-ops, risks)", commonParams: [], params: { id: { type: "string", required: false, description: "Backend proposal id" }, onchainId: { type: "string", required: false, description: "Governor proposal id" } } },
|
|
11277
|
+
{ id: "continuum-dao.fetch-proposal-votes", protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: "evm", description: "Who voted on a proposal and how (VoteCast / VoteCastWithParams)", commonParams: [], params: { proposalId: { type: "string", required: true, description: "Catalog id or governor proposal hash" } } },
|
|
10491
11278
|
{ id: "continuum-dao.forum-sign-in", protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: "evm", description: "EIP-712 forum login (veCTM gate first)", commonParams: ["keyGen", "purposeText"], params: { nodeKey: { type: "string", required: false, description: "Attached node key" }, username: { type: "string", required: false, description: "Username when there is no node key" } } },
|
|
10492
11279
|
{ id: "continuum-dao.forum-sign-in-eligible", protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: "evm", description: "Check veCTM forum login eligibility", commonParams: [], params: { address: { type: "string", required: true, description: "KeyGen or wallet address" } } },
|
|
10493
11280
|
{ id: "continuum-dao.forum-sign-out", protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: "evm", description: "Revoke forum ticket and sessions", commonParams: [], params: { ticket: { type: "string", required: true, description: "Forum write ticket" } } },
|
|
@@ -11530,6 +12317,305 @@ var pendleProtocolModule = {
|
|
|
11530
12317
|
]
|
|
11531
12318
|
};
|
|
11532
12319
|
registerProtocolModule(pendleProtocolModule);
|
|
12320
|
+
|
|
12321
|
+
// src/protocols/evm/derive/constants.ts
|
|
12322
|
+
var DERIVE_PROTOCOL_ID = "derive";
|
|
12323
|
+
var DERIVE_MAINNET_API = "https://api.derive.xyz/v3";
|
|
12324
|
+
var DERIVE_TESTNET_API = "https://testnet.api.derive.xyz/v3";
|
|
12325
|
+
var DERIVE_MAINNET_API_V2 = "https://api.lyra.finance";
|
|
12326
|
+
var DERIVE_TESTNET_API_V2 = "https://api-demo.lyra.finance";
|
|
12327
|
+
function deriveNetworkFromChainId(chainId) {
|
|
12328
|
+
return chainId === 11155111 ? "testnet" : "mainnet";
|
|
12329
|
+
}
|
|
12330
|
+
function deriveApiBaseUrl(network = "mainnet") {
|
|
12331
|
+
return network === "testnet" ? DERIVE_TESTNET_API : DERIVE_MAINNET_API;
|
|
12332
|
+
}
|
|
12333
|
+
function deriveApiFallbackBaseUrl(network = "mainnet") {
|
|
12334
|
+
return network === "testnet" ? DERIVE_TESTNET_API_V2 : DERIVE_MAINNET_API_V2;
|
|
12335
|
+
}
|
|
12336
|
+
var DERIVE_ASSET_ROW_CHAIN_IDS = [1, 10, 8453, 42161, 999, 11155111];
|
|
12337
|
+
function isDeriveAssetRowChainId(chainId) {
|
|
12338
|
+
return DERIVE_ASSET_ROW_CHAIN_IDS.includes(chainId);
|
|
12339
|
+
}
|
|
12340
|
+
function isDeriveChainSupported(chainId) {
|
|
12341
|
+
return isDeriveAssetRowChainId(chainId);
|
|
12342
|
+
}
|
|
12343
|
+
var NATIVE_ZERO = "0x0000000000000000000000000000000000000000";
|
|
12344
|
+
var USDC = {
|
|
12345
|
+
1: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
|
|
12346
|
+
10: "0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85",
|
|
12347
|
+
8453: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
|
|
12348
|
+
42161: "0xaf88d065e77c8cC2239327C5EDb3A432268e5831",
|
|
12349
|
+
11155111: "0x73Efab09362052D26FB93A730Be4F8a5EdC833af"
|
|
12350
|
+
};
|
|
12351
|
+
var WETH = {
|
|
12352
|
+
1: "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",
|
|
12353
|
+
10: "0x4200000000000000000000000000000000000006",
|
|
12354
|
+
8453: "0x4200000000000000000000000000000000000006",
|
|
12355
|
+
42161: "0x82aF49447D8a07e3bd95BD0d56f35241523fBab1"
|
|
12356
|
+
};
|
|
12357
|
+
var WBTC = {
|
|
12358
|
+
1: "0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599",
|
|
12359
|
+
10: "0x68f180fcCe6836688e9084f035309E29Bf0A2095",
|
|
12360
|
+
42161: "0x2f2a2543B76A4166549B7eCDcE5542a773Aa44fB"
|
|
12361
|
+
};
|
|
12362
|
+
var WHYPE = "0x5555555555555555555555555555555555555555";
|
|
12363
|
+
function deriveMappedTokensForChain(chainId) {
|
|
12364
|
+
const tokens = [];
|
|
12365
|
+
const add = (address, symbol, decimals, roles) => {
|
|
12366
|
+
if (!address) return;
|
|
12367
|
+
tokens.push({ address: viem.getAddress(address), symbol, decimals, roles });
|
|
12368
|
+
};
|
|
12369
|
+
if ([1, 10, 8453, 42161].includes(chainId)) {
|
|
12370
|
+
add(NATIVE_ZERO, "ETH", 18, ["native", "underlying"]);
|
|
12371
|
+
add(WETH[chainId], "WETH", 18, ["native_wrapped", "underlying"]);
|
|
12372
|
+
}
|
|
12373
|
+
if (chainId === 999) {
|
|
12374
|
+
add(NATIVE_ZERO, "HYPE", 18, ["native", "collateral"]);
|
|
12375
|
+
add(WHYPE, "WHYPE", 18, ["native_wrapped", "collateral"]);
|
|
12376
|
+
}
|
|
12377
|
+
add(USDC[chainId], "USDC", 6, ["collateral", "quote"]);
|
|
12378
|
+
add(WBTC[chainId], "WBTC", 8, ["underlying", "collateral"]);
|
|
12379
|
+
return tokens;
|
|
12380
|
+
}
|
|
12381
|
+
function deriveNativeWrappedForChain(chainId) {
|
|
12382
|
+
if (chainId === 999) return WHYPE;
|
|
12383
|
+
return WETH[chainId];
|
|
12384
|
+
}
|
|
12385
|
+
function deriveAdvisorNotes() {
|
|
12386
|
+
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.";
|
|
12387
|
+
}
|
|
12388
|
+
|
|
12389
|
+
// src/protocols/evm/derive/api.ts
|
|
12390
|
+
function methodName(method) {
|
|
12391
|
+
return method.replace(/^\//, "");
|
|
12392
|
+
}
|
|
12393
|
+
function isDerivePublicMethod(method) {
|
|
12394
|
+
return methodName(method).startsWith("public/");
|
|
12395
|
+
}
|
|
12396
|
+
function isEmptyDerivePublicResult(method, result) {
|
|
12397
|
+
const m = methodName(method);
|
|
12398
|
+
if (result == null) return true;
|
|
12399
|
+
if (m === "public/get_all_currencies" && Array.isArray(result) && result.length === 0) return true;
|
|
12400
|
+
if (m === "public/get_tickers" && result && typeof result === "object") {
|
|
12401
|
+
const tickers = result.tickers;
|
|
12402
|
+
if (Array.isArray(tickers) && tickers.length === 0) return true;
|
|
12403
|
+
if (tickers && typeof tickers === "object" && !Array.isArray(tickers) && Object.keys(tickers).length === 0) {
|
|
12404
|
+
return true;
|
|
12405
|
+
}
|
|
12406
|
+
}
|
|
12407
|
+
return false;
|
|
12408
|
+
}
|
|
12409
|
+
function isDeriveRecoverablePublicError(err) {
|
|
12410
|
+
const name = err instanceof Error ? err.name : "";
|
|
12411
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
12412
|
+
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(
|
|
12413
|
+
msg
|
|
12414
|
+
);
|
|
12415
|
+
}
|
|
12416
|
+
function unwrapResult(json, method) {
|
|
12417
|
+
if (json && typeof json === "object") {
|
|
12418
|
+
const rec = json;
|
|
12419
|
+
if (rec.error) {
|
|
12420
|
+
const err = rec.error;
|
|
12421
|
+
const detail = err.data != null && String(err.data).trim() ? ` (${String(err.data).slice(0, 160)})` : "";
|
|
12422
|
+
throw new Error(`Derive ${method} failed: ${err.message ?? JSON.stringify(rec.error)}${detail}`);
|
|
12423
|
+
}
|
|
12424
|
+
if ("result" in rec) return rec.result;
|
|
12425
|
+
}
|
|
12426
|
+
return json;
|
|
12427
|
+
}
|
|
12428
|
+
async function deriveRpcPost(args) {
|
|
12429
|
+
const method = methodName(args.method);
|
|
12430
|
+
const headers = { "Content-Type": "application/json" };
|
|
12431
|
+
if (args.auth) {
|
|
12432
|
+
headers["X-DeriveWallet"] = args.auth.wallet;
|
|
12433
|
+
headers["X-DeriveTimestamp"] = args.auth.timestamp;
|
|
12434
|
+
headers["X-DeriveSignature"] = args.auth.signature;
|
|
12435
|
+
}
|
|
12436
|
+
const res = await fetch(`${args.base}/${method}`, {
|
|
12437
|
+
method: "POST",
|
|
12438
|
+
headers,
|
|
12439
|
+
body: JSON.stringify(args.params ?? {}),
|
|
12440
|
+
cache: "no-store",
|
|
12441
|
+
signal: AbortSignal.timeout(15e3)
|
|
12442
|
+
});
|
|
12443
|
+
const text = await res.text().catch(() => "");
|
|
12444
|
+
if (!res.ok || !text.trim() || text.trim() === "Not Found") {
|
|
12445
|
+
throw new Error(`Derive ${method} HTTP ${res.status}: ${text.slice(0, 240) || "empty body"}`);
|
|
12446
|
+
}
|
|
12447
|
+
let json;
|
|
12448
|
+
try {
|
|
12449
|
+
json = JSON.parse(text);
|
|
12450
|
+
} catch {
|
|
12451
|
+
throw new Error(`Derive ${method} returned non-JSON: ${text.slice(0, 160)}`);
|
|
12452
|
+
}
|
|
12453
|
+
const result = unwrapResult(json, method);
|
|
12454
|
+
if (isEmptyDerivePublicResult(method, result)) {
|
|
12455
|
+
throw new Error(`Derive ${method} returned empty catalog`);
|
|
12456
|
+
}
|
|
12457
|
+
return result;
|
|
12458
|
+
}
|
|
12459
|
+
async function deriveRpc(args) {
|
|
12460
|
+
const network = args.network ?? "mainnet";
|
|
12461
|
+
const method = methodName(args.method);
|
|
12462
|
+
const primary = deriveApiBaseUrl(network);
|
|
12463
|
+
try {
|
|
12464
|
+
return await deriveRpcPost({
|
|
12465
|
+
base: primary,
|
|
12466
|
+
method,
|
|
12467
|
+
params: args.params,
|
|
12468
|
+
auth: args.auth
|
|
12469
|
+
});
|
|
12470
|
+
} catch (err) {
|
|
12471
|
+
const fallback = deriveApiFallbackBaseUrl(network);
|
|
12472
|
+
if (!isDerivePublicMethod(method) || fallback === primary || !isDeriveRecoverablePublicError(err)) {
|
|
12473
|
+
throw err;
|
|
12474
|
+
}
|
|
12475
|
+
return await deriveRpcPost({
|
|
12476
|
+
base: fallback,
|
|
12477
|
+
method,
|
|
12478
|
+
params: args.params,
|
|
12479
|
+
auth: args.auth
|
|
12480
|
+
});
|
|
12481
|
+
}
|
|
12482
|
+
}
|
|
12483
|
+
|
|
12484
|
+
// src/protocols/evm/derive/assets.ts
|
|
12485
|
+
async function deriveFetchCurrenciesRaw(args) {
|
|
12486
|
+
const result = await deriveRpc({
|
|
12487
|
+
method: "public/get_all_currencies",
|
|
12488
|
+
network: args?.network
|
|
12489
|
+
});
|
|
12490
|
+
if (Array.isArray(result)) return result;
|
|
12491
|
+
if (result && typeof result === "object" && Array.isArray(result.currencies)) {
|
|
12492
|
+
return result.currencies;
|
|
12493
|
+
}
|
|
12494
|
+
return [];
|
|
12495
|
+
}
|
|
12496
|
+
|
|
12497
|
+
// src/protocols/evm/derive/index.ts
|
|
12498
|
+
var deriveProtocolModule = {
|
|
12499
|
+
id: DERIVE_PROTOCOL_ID,
|
|
12500
|
+
chainCategory: "evm",
|
|
12501
|
+
isChainSupported(ctx) {
|
|
12502
|
+
if (ctx.chainCategory !== "evm") return false;
|
|
12503
|
+
const chainId = typeof ctx.chainId === "number" ? ctx.chainId : Number(ctx.chainId);
|
|
12504
|
+
return Number.isFinite(chainId) && isDeriveChainSupported(chainId);
|
|
12505
|
+
},
|
|
12506
|
+
isTokenSupported(token) {
|
|
12507
|
+
if (token.category !== "evm") return false;
|
|
12508
|
+
return token.kind === "erc20" || token.kind === "native";
|
|
12509
|
+
},
|
|
12510
|
+
actions: [
|
|
12511
|
+
{
|
|
12512
|
+
id: "derive.depositNewSubaccount",
|
|
12513
|
+
protocolId: DERIVE_PROTOCOL_ID,
|
|
12514
|
+
chainCategory: "evm",
|
|
12515
|
+
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.",
|
|
12516
|
+
commonParams: ["keyGen", "purposeText", "useCustomGas"],
|
|
12517
|
+
params: {
|
|
12518
|
+
protocolAsset: { type: "string", required: true, description: "Risk-universe collateral protocol asset" },
|
|
12519
|
+
underlyingErc20: { type: "string", required: true, description: "L1 ERC-20 to approve (usually USDC)" },
|
|
12520
|
+
amountHuman: { type: "string", required: true, description: "Deposit amount in underlying decimals" },
|
|
12521
|
+
managerId: { type: "number", required: true, description: "Risk-universe manager_id" }
|
|
12522
|
+
}
|
|
12523
|
+
},
|
|
12524
|
+
{
|
|
12525
|
+
id: "derive.depositAddressTransfer",
|
|
12526
|
+
protocolId: DERIVE_PROTOCOL_ID,
|
|
12527
|
+
chainCategory: "evm",
|
|
12528
|
+
description: "Ethereum L1 ERC-20 transfer to a registered Derive deposit address (standard / keeper sweep). Call register_deposit_address first.",
|
|
12529
|
+
commonParams: ["keyGen", "purposeText", "useCustomGas"],
|
|
12530
|
+
params: {
|
|
12531
|
+
underlyingErc20: { type: "string", required: true, description: "L1 ERC-20 to send (usually USDC)" },
|
|
12532
|
+
amountHuman: { type: "string", required: true, description: "Transfer amount in token units" },
|
|
12533
|
+
depositAddress: { type: "string", required: true, description: "From register_deposit_address" }
|
|
12534
|
+
}
|
|
12535
|
+
},
|
|
12536
|
+
{
|
|
12537
|
+
id: "derive.socketDeposit",
|
|
12538
|
+
protocolId: DERIVE_PROTOCOL_ID,
|
|
12539
|
+
chainCategory: "evm",
|
|
12540
|
+
description: "Socket FAST deposit of USDC/WETH/WBTC on Ethereum, Optimism, Base, or Arbitrum into Derive Chain. Native ETH wraps to WETH first. useCustomGas.",
|
|
12541
|
+
commonParams: ["keyGen", "purposeText", "useCustomGas"],
|
|
12542
|
+
params: {
|
|
12543
|
+
token: { type: "string", required: true, description: "Row ERC-20 or native 0x0 (wraps to WETH)" },
|
|
12544
|
+
amountHuman: { type: "string", required: true, description: "Deposit amount in token units" }
|
|
12545
|
+
}
|
|
12546
|
+
},
|
|
12547
|
+
{
|
|
12548
|
+
id: "derive.hypeVaultDeposit",
|
|
12549
|
+
protocolId: DERIVE_PROTOCOL_ID,
|
|
12550
|
+
chainCategory: "evm",
|
|
12551
|
+
description: "HyperEVM (999): wrap native HYPE to WHYPE if needed, approve Derive vault, deposit.",
|
|
12552
|
+
commonParams: ["keyGen", "purposeText", "useCustomGas"],
|
|
12553
|
+
params: {
|
|
12554
|
+
amountHuman: { type: "string", required: true, description: "HYPE amount" },
|
|
12555
|
+
token: { type: "string", required: false, description: "Native 0x0 or WHYPE" }
|
|
12556
|
+
}
|
|
12557
|
+
},
|
|
12558
|
+
{
|
|
12559
|
+
id: "derive.placeOrder",
|
|
12560
|
+
protocolId: DERIVE_PROTOCOL_ID,
|
|
12561
|
+
chainCategory: "evm",
|
|
12562
|
+
description: "Place a Derive options limit order via EIP-712 Action (delivery derive_exchange). Does not spend the current-chain token.",
|
|
12563
|
+
commonParams: ["keyGen", "purposeText"],
|
|
12564
|
+
params: {
|
|
12565
|
+
instrumentName: { type: "string", required: true, description: "e.g. ETH-20260626-3000-C" },
|
|
12566
|
+
direction: { type: "string", required: true, description: "buy or sell" },
|
|
12567
|
+
amount: { type: "string", required: true, description: "Contract size" },
|
|
12568
|
+
limitPrice: { type: "string", required: true, description: "Limit price" },
|
|
12569
|
+
maxFee: { type: "string", required: true, description: "Max fee (e18-scaled, \u226412 decimals)" },
|
|
12570
|
+
subaccountId: { type: "number", required: true, description: "From fetch_subaccounts \u2014 never 0" }
|
|
12571
|
+
}
|
|
12572
|
+
},
|
|
12573
|
+
{
|
|
12574
|
+
id: "derive.replaceOrder",
|
|
12575
|
+
protocolId: DERIVE_PROTOCOL_ID,
|
|
12576
|
+
chainCategory: "evm",
|
|
12577
|
+
description: "Replace a Derive open order (EIP-712 Action + orderIdToCancel or nonceToCancel).",
|
|
12578
|
+
commonParams: ["keyGen", "purposeText"],
|
|
12579
|
+
params: {
|
|
12580
|
+
instrumentName: { type: "string", required: true, description: "Instrument of the replacement order" },
|
|
12581
|
+
direction: { type: "string", required: true, description: "buy or sell" },
|
|
12582
|
+
amount: { type: "string", required: true, description: "Contract size" },
|
|
12583
|
+
limitPrice: { type: "string", required: true, description: "Limit price" },
|
|
12584
|
+
maxFee: { type: "string", required: true, description: "Max fee" },
|
|
12585
|
+
subaccountId: { type: "number", required: true, description: "From fetch_subaccounts" },
|
|
12586
|
+
orderIdToCancel: { type: "string", required: false, description: "Existing order id (xor nonceToCancel)" },
|
|
12587
|
+
nonceToCancel: { type: "string", required: false, description: "Existing order nonce (xor orderIdToCancel)" }
|
|
12588
|
+
}
|
|
12589
|
+
},
|
|
12590
|
+
{
|
|
12591
|
+
id: "derive.cancel",
|
|
12592
|
+
protocolId: DERIVE_PROTOCOL_ID,
|
|
12593
|
+
chainCategory: "evm",
|
|
12594
|
+
description: "Cancel a Derive open order. v3 cancel is session-auth; this signs EIP-191 login for private/cancel delivery.",
|
|
12595
|
+
commonParams: ["keyGen", "purposeText"],
|
|
12596
|
+
params: {
|
|
12597
|
+
instrumentName: { type: "string", required: true, description: "Instrument of the open order" },
|
|
12598
|
+
orderId: { type: "string", required: true, description: "order_id from fetch_open_orders" },
|
|
12599
|
+
subaccountId: { type: "number", required: true, description: "From fetch_subaccounts" }
|
|
12600
|
+
}
|
|
12601
|
+
},
|
|
12602
|
+
{
|
|
12603
|
+
id: "derive.transferSpot",
|
|
12604
|
+
protocolId: DERIVE_PROTOCOL_ID,
|
|
12605
|
+
chainCategory: "evm",
|
|
12606
|
+
description: "EIP-712 transfer_spot. Use toSubaccountId 0 + newSubaccountManager to create an extra subaccount after the first funded one.",
|
|
12607
|
+
commonParams: ["keyGen", "purposeText"],
|
|
12608
|
+
params: {
|
|
12609
|
+
fromSubaccountId: { type: "number", required: true, description: "Funded source subaccount" },
|
|
12610
|
+
toSubaccountId: { type: "number", required: true, description: "0 to create an extra subaccount" },
|
|
12611
|
+
newSubaccountManager: { type: "number", required: true, description: "Required when toSubaccountId is 0" },
|
|
12612
|
+
asset: { type: "string", required: true, description: "Protocol asset address" },
|
|
12613
|
+
amount: { type: "string", required: true, description: "Transfer amount" }
|
|
12614
|
+
}
|
|
12615
|
+
}
|
|
12616
|
+
]
|
|
12617
|
+
};
|
|
12618
|
+
registerProtocolModule(deriveProtocolModule);
|
|
11533
12619
|
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");
|
|
11534
12620
|
var SKILL_PROTOCOL_IDS = [
|
|
11535
12621
|
"aave-v4",
|
|
@@ -11549,6 +12635,7 @@ var SKILL_PROTOCOL_IDS = [
|
|
|
11549
12635
|
"pendle",
|
|
11550
12636
|
"continuum-dao",
|
|
11551
12637
|
"compound-v3",
|
|
12638
|
+
"derive",
|
|
11552
12639
|
"yield-compare"
|
|
11553
12640
|
];
|
|
11554
12641
|
function getToolsForProtocol(protocolId) {
|
|
@@ -11977,7 +13064,7 @@ var PROTOCOL_SUPPORT_ADVISORS = {
|
|
|
11977
13064
|
if (ve) tokens.push({ address: ve, symbol: "veCTM", roles: ["position_nft"] });
|
|
11978
13065
|
return {
|
|
11979
13066
|
tokens,
|
|
11980
|
-
notes: tokens.length === 0 ? "ContinuumDAO addresses are placeholders until redeploy. Lock/attach/governance stay Linea-only. Create lock needs >= 1 CTM (live minimumLock) and 1\u2013208 weeks. Prefer live GET /protocol/dao. For \u201Cwhat proposals are live now?\u201D use ctm_continuum_dao_fetch_live_proposals (not fetch_proposals). Propose requires getVotes >= live proposalThreshold() (max of 1000e18 ve power and 1% of total votes). Bravo empty actions insert a KeyGen no-op; Delta votes need nOptions+1 weights (last is NOTA). No billing legs. After propose is mined, ctm_continuum_dao_register_proposal. Queue is not implemented." : `Default ContinuumDAO assets: ${listContinuumDaoDefaultAssets().filter((a) => a.chainId === chainId).map((a) => a.symbol).join(", ")}. Lock/attach/governance stay Linea-only. Create lock needs >= 1 CTM (live minimumLock) and 1\u2013208 weeks. For \u201Cwhat proposals are live now?\u201D use ctm_continuum_dao_fetch_live_proposals. Propose requires getVotes >= live proposalThreshold() (max of 1000e18 ve power and 1% of total votes). Bravo empty actions insert a KeyGen no-op; Delta votes need nOptions+1 weights (last is NOTA). No billing legs. After propose is mined, ctm_continuum_dao_register_proposal. Queue is not implemented.`
|
|
13067
|
+
notes: tokens.length === 0 ? "ContinuumDAO addresses are placeholders until redeploy. Lock/attach/governance stay Linea-only. Create lock needs >= 1 CTM (live minimumLock) and 1\u2013208 weeks. Prefer live GET /protocol/dao. For \u201Cwhat proposals are live now?\u201D use ctm_continuum_dao_fetch_live_proposals (not fetch_proposals). After naming a proposal, offer ctm_continuum_dao_fetch_proposal_votes to see who voted and how. Propose requires getVotes >= live proposalThreshold() (max of 1000e18 ve power and 1% of total votes). Bravo empty actions insert a KeyGen no-op; Delta votes need nOptions+1 weights (last is NOTA). No billing legs. After propose is mined, ctm_continuum_dao_register_proposal. Queue is not implemented." : `Default ContinuumDAO assets: ${listContinuumDaoDefaultAssets().filter((a) => a.chainId === chainId).map((a) => a.symbol).join(", ")}. Lock/attach/governance stay Linea-only. Create lock needs >= 1 CTM (live minimumLock) and 1\u2013208 weeks. For \u201Cwhat proposals are live now?\u201D use ctm_continuum_dao_fetch_live_proposals. After naming a proposal, offer ctm_continuum_dao_fetch_proposal_votes to see who voted and how. Propose requires getVotes >= live proposalThreshold() (max of 1000e18 ve power and 1% of total votes). Bravo empty actions insert a KeyGen no-op; Delta votes need nOptions+1 weights (last is NOTA). No billing legs. After propose is mined, ctm_continuum_dao_register_proposal. Queue is not implemented.`
|
|
11981
13068
|
};
|
|
11982
13069
|
}
|
|
11983
13070
|
}),
|
|
@@ -12088,6 +13175,45 @@ var PROTOCOL_SUPPORT_ADVISORS = {
|
|
|
12088
13175
|
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)."
|
|
12089
13176
|
};
|
|
12090
13177
|
}
|
|
13178
|
+
}),
|
|
13179
|
+
[DERIVE_PROTOCOL_ID]: advisor(DERIVE_PROTOCOL_ID, "api_underlyings", {
|
|
13180
|
+
async supportedChainIds() {
|
|
13181
|
+
return [...DERIVE_ASSET_ROW_CHAIN_IDS];
|
|
13182
|
+
},
|
|
13183
|
+
async supportedTokens(chainId) {
|
|
13184
|
+
if (!isDeriveChainSupported(chainId)) {
|
|
13185
|
+
return { tokens: [], notes: "Derive logo rows are fundable chains only: Ethereum, OP, Base, Arbitrum, HyperEVM, Sepolia." };
|
|
13186
|
+
}
|
|
13187
|
+
const mapped = deriveMappedTokensForChain(chainId);
|
|
13188
|
+
let tokens = mapped;
|
|
13189
|
+
try {
|
|
13190
|
+
const currencies = await deriveFetchCurrenciesRaw({ network: deriveNetworkFromChainId(chainId) });
|
|
13191
|
+
const symbols = new Set(
|
|
13192
|
+
currencies.map((c) => String(c.currency ?? "").toUpperCase()).filter(Boolean)
|
|
13193
|
+
);
|
|
13194
|
+
if (symbols.size > 0) {
|
|
13195
|
+
tokens = mapped.filter((t) => {
|
|
13196
|
+
const s = t.symbol.toUpperCase();
|
|
13197
|
+
return symbols.has(s) || s === "WETH" && symbols.has("ETH") || s === "WBTC" && symbols.has("BTC") || s === "HYPE" || s === "WHYPE";
|
|
13198
|
+
});
|
|
13199
|
+
}
|
|
13200
|
+
} catch {
|
|
13201
|
+
}
|
|
13202
|
+
return {
|
|
13203
|
+
tokens,
|
|
13204
|
+
nativeWrapped: deriveNativeWrappedForChain(chainId),
|
|
13205
|
+
notes: deriveAdvisorNotes()
|
|
13206
|
+
};
|
|
13207
|
+
},
|
|
13208
|
+
async isTokenSupported(chainId, address) {
|
|
13209
|
+
if (!isDeriveChainSupported(chainId)) return false;
|
|
13210
|
+
try {
|
|
13211
|
+
const normalized = viem.getAddress(address).toLowerCase();
|
|
13212
|
+
return deriveMappedTokensForChain(chainId).some((t) => t.address.toLowerCase() === normalized);
|
|
13213
|
+
} catch {
|
|
13214
|
+
return false;
|
|
13215
|
+
}
|
|
13216
|
+
}
|
|
12091
13217
|
})
|
|
12092
13218
|
};
|
|
12093
13219
|
function getProtocolSupportAdvisor(protocolId) {
|
|
@@ -12116,6 +13242,7 @@ registerProtocolModule(aerodromeProtocolModule);
|
|
|
12116
13242
|
registerProtocolModule(continuumDaoProtocolModule);
|
|
12117
13243
|
registerProtocolModule(compoundV3ProtocolModule);
|
|
12118
13244
|
registerProtocolModule(pendleProtocolModule);
|
|
13245
|
+
registerProtocolModule(deriveProtocolModule);
|
|
12119
13246
|
function getAgentCatalog() {
|
|
12120
13247
|
return {
|
|
12121
13248
|
protocols: getProtocolModules(),
|
|
@@ -12142,6 +13269,7 @@ function getAgentCatalog() {
|
|
|
12142
13269
|
continuumDao: continuumDaoProtocolModule,
|
|
12143
13270
|
compoundV3: compoundV3ProtocolModule,
|
|
12144
13271
|
pendle: pendleProtocolModule,
|
|
13272
|
+
derive: deriveProtocolModule,
|
|
12145
13273
|
/** Prefer getAgentCatalogForMcp() or getMcpToolDefinitions() for MCP servers. */
|
|
12146
13274
|
mcp: getAgentCatalogForMcp()
|
|
12147
13275
|
};
|
|
@@ -12270,6 +13398,8 @@ exports.mcpContinuumDaoFetchProposalInputSchema = mcpContinuumDaoFetchProposalIn
|
|
|
12270
13398
|
exports.mcpContinuumDaoFetchProposalOutputSchema = mcpContinuumDaoFetchProposalOutputSchema;
|
|
12271
13399
|
exports.mcpContinuumDaoFetchProposalStateInputSchema = mcpContinuumDaoFetchProposalStateInputSchema;
|
|
12272
13400
|
exports.mcpContinuumDaoFetchProposalStateOutputSchema = mcpContinuumDaoFetchProposalStateOutputSchema;
|
|
13401
|
+
exports.mcpContinuumDaoFetchProposalVotesInputSchema = mcpContinuumDaoFetchProposalVotesInputSchema;
|
|
13402
|
+
exports.mcpContinuumDaoFetchProposalVotesOutputSchema = mcpContinuumDaoFetchProposalVotesOutputSchema;
|
|
12273
13403
|
exports.mcpContinuumDaoFetchProposalsInputSchema = mcpContinuumDaoFetchProposalsInputSchema;
|
|
12274
13404
|
exports.mcpContinuumDaoFetchProposalsOutputSchema = mcpContinuumDaoFetchProposalsOutputSchema;
|
|
12275
13405
|
exports.mcpContinuumDaoFetchVotingPowerInputSchema = mcpContinuumDaoFetchVotingPowerInputSchema;
|
|
@@ -12329,6 +13459,7 @@ exports.mcpContinuumDaoMpaMailboxSendOutputSchema = mcpContinuumDaoMpaMailboxSen
|
|
|
12329
13459
|
exports.mcpContinuumDaoMpaRetractInputSchema = mcpContinuumDaoMpaRetractInputSchema;
|
|
12330
13460
|
exports.mcpContinuumDaoMpaRetractOutputSchema = mcpContinuumDaoMpaRetractOutputSchema;
|
|
12331
13461
|
exports.mcpContinuumDaoProposalIdInputSchema = mcpContinuumDaoProposalIdInputSchema;
|
|
13462
|
+
exports.mcpContinuumDaoProposalVoteRowSchema = mcpContinuumDaoProposalVoteRowSchema;
|
|
12332
13463
|
exports.mcpContinuumDaoProposeBravoInputSchema = mcpContinuumDaoProposeBravoInputSchema;
|
|
12333
13464
|
exports.mcpContinuumDaoProposeDeltaInputSchema = mcpContinuumDaoProposeDeltaInputSchema;
|
|
12334
13465
|
exports.mcpContinuumDaoRegisterProposalInputSchema = mcpContinuumDaoRegisterProposalInputSchema;
|
|
@@ -12356,6 +13487,42 @@ exports.mcpCurveDaoQuoteInputSchema = mcpCurveDaoQuoteInputSchema;
|
|
|
12356
13487
|
exports.mcpCurveDaoQuoteOutputSchema = mcpCurveDaoQuoteOutputSchema;
|
|
12357
13488
|
exports.mcpCurveDaoQuoteRemoveLiquidityInputSchema = mcpCurveDaoQuoteRemoveLiquidityInputSchema;
|
|
12358
13489
|
exports.mcpCurveDaoQuoteRemoveLiquidityOutputSchema = mcpCurveDaoQuoteRemoveLiquidityOutputSchema;
|
|
13490
|
+
exports.mcpDeriveCancelInputSchema = mcpDeriveCancelInputSchema;
|
|
13491
|
+
exports.mcpDeriveDepositAddressTransferInputSchema = mcpDeriveDepositAddressTransferInputSchema;
|
|
13492
|
+
exports.mcpDeriveDepositNewSubaccountInputSchema = mcpDeriveDepositNewSubaccountInputSchema;
|
|
13493
|
+
exports.mcpDeriveFetchCurrenciesInputSchema = mcpDeriveFetchCurrenciesInputSchema;
|
|
13494
|
+
exports.mcpDeriveFetchCurrenciesOutputSchema = mcpDeriveFetchCurrenciesOutputSchema;
|
|
13495
|
+
exports.mcpDeriveFetchMarketSnapshotInputSchema = mcpDeriveFetchMarketSnapshotInputSchema;
|
|
13496
|
+
exports.mcpDeriveFetchMarketSnapshotOutputSchema = mcpDeriveFetchMarketSnapshotOutputSchema;
|
|
13497
|
+
exports.mcpDeriveFetchOhlcvInputSchema = mcpDeriveFetchOhlcvInputSchema;
|
|
13498
|
+
exports.mcpDeriveFetchOhlcvOutputSchema = mcpDeriveFetchOhlcvOutputSchema;
|
|
13499
|
+
exports.mcpDeriveFetchOpenOrdersInputSchema = mcpDeriveFetchOpenOrdersInputSchema;
|
|
13500
|
+
exports.mcpDeriveFetchOpenOrdersOutputSchema = mcpDeriveFetchOpenOrdersOutputSchema;
|
|
13501
|
+
exports.mcpDeriveFetchOptionChainInputSchema = mcpDeriveFetchOptionChainInputSchema;
|
|
13502
|
+
exports.mcpDeriveFetchOptionChainOutputSchema = mcpDeriveFetchOptionChainOutputSchema;
|
|
13503
|
+
exports.mcpDeriveFetchPendingDepositsInputSchema = mcpDeriveFetchPendingDepositsInputSchema;
|
|
13504
|
+
exports.mcpDeriveFetchPendingDepositsOutputSchema = mcpDeriveFetchPendingDepositsOutputSchema;
|
|
13505
|
+
exports.mcpDeriveFetchPortfolioInputSchema = mcpDeriveFetchPortfolioInputSchema;
|
|
13506
|
+
exports.mcpDeriveFetchPortfolioOutputSchema = mcpDeriveFetchPortfolioOutputSchema;
|
|
13507
|
+
exports.mcpDeriveFetchPositionsInputSchema = mcpDeriveFetchPositionsInputSchema;
|
|
13508
|
+
exports.mcpDeriveFetchPositionsOutputSchema = mcpDeriveFetchPositionsOutputSchema;
|
|
13509
|
+
exports.mcpDeriveFetchRiskUniversesInputSchema = mcpDeriveFetchRiskUniversesInputSchema;
|
|
13510
|
+
exports.mcpDeriveFetchRiskUniversesOutputSchema = mcpDeriveFetchRiskUniversesOutputSchema;
|
|
13511
|
+
exports.mcpDeriveFetchSubaccountsInputSchema = mcpDeriveFetchSubaccountsInputSchema;
|
|
13512
|
+
exports.mcpDeriveFetchSubaccountsOutputSchema = mcpDeriveFetchSubaccountsOutputSchema;
|
|
13513
|
+
exports.mcpDeriveFetchTickersInputSchema = mcpDeriveFetchTickersInputSchema;
|
|
13514
|
+
exports.mcpDeriveFetchTickersOutputSchema = mcpDeriveFetchTickersOutputSchema;
|
|
13515
|
+
exports.mcpDeriveHypeVaultDepositInputSchema = mcpDeriveHypeVaultDepositInputSchema;
|
|
13516
|
+
exports.mcpDeriveOrderQuoteInputSchema = mcpDeriveOrderQuoteInputSchema;
|
|
13517
|
+
exports.mcpDeriveOrderQuoteOutputSchema = mcpDeriveOrderQuoteOutputSchema;
|
|
13518
|
+
exports.mcpDerivePlaceOrderInputSchema = mcpDerivePlaceOrderInputSchema;
|
|
13519
|
+
exports.mcpDeriveRegisterDepositAddressInputSchema = mcpDeriveRegisterDepositAddressInputSchema;
|
|
13520
|
+
exports.mcpDeriveRegisterDepositAddressOutputSchema = mcpDeriveRegisterDepositAddressOutputSchema;
|
|
13521
|
+
exports.mcpDeriveReplaceOrderInputSchema = mcpDeriveReplaceOrderInputSchema;
|
|
13522
|
+
exports.mcpDeriveSearchInstrumentsInputSchema = mcpDeriveSearchInstrumentsInputSchema;
|
|
13523
|
+
exports.mcpDeriveSearchInstrumentsOutputSchema = mcpDeriveSearchInstrumentsOutputSchema;
|
|
13524
|
+
exports.mcpDeriveSocketDepositInputSchema = mcpDeriveSocketDepositInputSchema;
|
|
13525
|
+
exports.mcpDeriveTransferSpotInputSchema = mcpDeriveTransferSpotInputSchema;
|
|
12359
13526
|
exports.mcpEthenaClaimInputSchema = mcpEthenaClaimInputSchema;
|
|
12360
13527
|
exports.mcpEthenaCooldownInputSchema = mcpEthenaCooldownInputSchema;
|
|
12361
13528
|
exports.mcpEthenaFetchSusdeApyInputSchema = mcpEthenaFetchSusdeApyInputSchema;
|
|
@@ -12437,6 +13604,7 @@ exports.mcpHyperliquidLimitOrderInputSchema = mcpHyperliquidLimitOrderInputSchem
|
|
|
12437
13604
|
exports.mcpHyperliquidSearchMarketsInputSchema = mcpHyperliquidSearchMarketsInputSchema;
|
|
12438
13605
|
exports.mcpHyperliquidSearchMarketsOutputSchema = mcpHyperliquidSearchMarketsOutputSchema;
|
|
12439
13606
|
exports.mcpHyperliquidStakeInputSchema = mcpHyperliquidStakeInputSchema;
|
|
13607
|
+
exports.mcpHyperliquidTrailingStopInputSchema = mcpHyperliquidTrailingStopInputSchema;
|
|
12440
13608
|
exports.mcpHyperliquidUndelegateInputSchema = mcpHyperliquidUndelegateInputSchema;
|
|
12441
13609
|
exports.mcpHyperliquidUnstakeInputSchema = mcpHyperliquidUnstakeInputSchema;
|
|
12442
13610
|
exports.mcpHyperliquidUpdateLeverageInputSchema = mcpHyperliquidUpdateLeverageInputSchema;
|