@continuumdao/ctm-mpc-defi 0.2.13 → 0.2.17
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 +1149 -287
- package/dist/agent/catalog.cjs.map +1 -1
- package/dist/agent/catalog.d.ts +1655 -306
- package/dist/agent/catalog.js +1144 -288
- package/dist/agent/catalog.js.map +1 -1
- package/dist/agent/skills/_shared/multisign-mcp-gas.md +7 -4
- package/dist/agent/skills/circle-cctp/SKILL.md +63 -0
- package/dist/chains/evm/index.cjs +75 -0
- package/dist/chains/evm/index.cjs.map +1 -1
- package/dist/chains/evm/index.d.ts +31 -1
- package/dist/chains/evm/index.js +73 -2
- package/dist/chains/evm/index.js.map +1 -1
- package/dist/index.cjs +140 -32
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +138 -34
- package/dist/index.js.map +1 -1
- package/dist/protocols/evm/circle-cctp/index.cjs +1067 -0
- package/dist/protocols/evm/circle-cctp/index.cjs.map +1 -0
- package/dist/protocols/evm/circle-cctp/index.d.ts +281 -0
- package/dist/protocols/evm/circle-cctp/index.js +1026 -0
- package/dist/protocols/evm/circle-cctp/index.js.map +1 -0
- package/dist/protocols/evm/euler-v2/index.cjs +29 -2
- package/dist/protocols/evm/euler-v2/index.cjs.map +1 -1
- package/dist/protocols/evm/euler-v2/index.d.ts +23 -1
- package/dist/protocols/evm/euler-v2/index.js +29 -3
- package/dist/protocols/evm/euler-v2/index.js.map +1 -1
- package/dist/protocols/evm/gmx/index.cjs +42 -8
- package/dist/protocols/evm/gmx/index.cjs.map +1 -1
- package/dist/protocols/evm/gmx/index.d.ts +20 -4
- package/dist/protocols/evm/gmx/index.js +42 -9
- package/dist/protocols/evm/gmx/index.js.map +1 -1
- package/dist/protocols/evm/maple/index.cjs +9 -1
- package/dist/protocols/evm/maple/index.cjs.map +1 -1
- package/dist/protocols/evm/maple/index.d.ts +2 -1
- package/dist/protocols/evm/maple/index.js +9 -1
- package/dist/protocols/evm/maple/index.js.map +1 -1
- package/dist/protocols/evm/morpho/index.cjs +56 -0
- package/dist/protocols/evm/morpho/index.cjs.map +1 -1
- package/dist/protocols/evm/morpho/index.d.ts +28 -1
- package/dist/protocols/evm/morpho/index.js +56 -1
- package/dist/protocols/evm/morpho/index.js.map +1 -1
- package/dist/protocols/evm/uniswap-v4/index.cjs +98 -26
- package/dist/protocols/evm/uniswap-v4/index.cjs.map +1 -1
- package/dist/protocols/evm/uniswap-v4/index.js +99 -27
- package/dist/protocols/evm/uniswap-v4/index.js.map +1 -1
- package/package.json +6 -1
package/dist/agent/catalog.cjs
CHANGED
|
@@ -411,7 +411,7 @@ var EVM_COMMON_PARAM_DOCS = {
|
|
|
411
411
|
}
|
|
412
412
|
};
|
|
413
413
|
var MULTISIGN_SUBMIT_OUTPUT_DOC = {
|
|
414
|
-
description: "Submitted mpc-auth multiSignRequest id. continuum-mcp-server builds, signs the management envelope, and POSTs /multiSignRequest. Continue with
|
|
414
|
+
description: "Submitted mpc-auth multiSignRequest id. continuum-mcp-server builds, signs the management envelope, and POSTs /multiSignRequest. Continue with sign_request_agree \u2192 trigger_sign_result \u2192 broadcast_sign_result. Do not poll wait_for_sign_request_ready after submit (Join may take days). Do not call the same build tool again if requestId was returned.",
|
|
415
415
|
fields: {
|
|
416
416
|
requestId: {
|
|
417
417
|
type: "string",
|
|
@@ -423,7 +423,7 @@ var MULTISIGN_SUBMIT_OUTPUT_DOC = {
|
|
|
423
423
|
},
|
|
424
424
|
followUp: {
|
|
425
425
|
type: "string",
|
|
426
|
-
description: "Lifecycle next steps (
|
|
426
|
+
description: "Lifecycle next steps (sign_request_agree \u2192 trigger_sign_result \u2192 broadcast_sign_result). No polling after submit."
|
|
427
427
|
}
|
|
428
428
|
}
|
|
429
429
|
};
|
|
@@ -481,7 +481,6 @@ var MANAGEMENT_SIG_DOC = {
|
|
|
481
481
|
// src/agent/mcpMultisignSubmitMeta.ts
|
|
482
482
|
var MCP_MULTISIGN_SUBMIT_DESCRIPTION_SUFFIX = "Builds the unsigned batch, signs the management envelope, and POSTs /multiSignRequest. Returns { requestId } on success \u2014 do not call again; use list_sign_requests to verify duplicates.";
|
|
483
483
|
var MCP_MULTISIGN_SUBMIT_FOLLOW_UP = [
|
|
484
|
-
"wait_for_sign_request_ready",
|
|
485
484
|
"sign_request_agree",
|
|
486
485
|
"trigger_sign_result",
|
|
487
486
|
"broadcast_sign_result"
|
|
@@ -619,13 +618,287 @@ var jsonObjectSchema = zod.z.record(zod.z.unknown());
|
|
|
619
618
|
function parseMultisignBuilderOutput(data) {
|
|
620
619
|
return multisignOutputSchema.parse(data);
|
|
621
620
|
}
|
|
621
|
+
|
|
622
|
+
// src/agent/schemas/chainPreprocess.ts
|
|
623
|
+
function preprocessObject(raw) {
|
|
624
|
+
if (!raw || typeof raw !== "object" || Array.isArray(raw)) return null;
|
|
625
|
+
return { ...raw };
|
|
626
|
+
}
|
|
627
|
+
function firstDefined(...values) {
|
|
628
|
+
for (const v of values) {
|
|
629
|
+
if (v === void 0 || v === null) continue;
|
|
630
|
+
if (typeof v === "string" && !v.trim()) continue;
|
|
631
|
+
return v;
|
|
632
|
+
}
|
|
633
|
+
return void 0;
|
|
634
|
+
}
|
|
635
|
+
function aliasField(o, target, ...sources) {
|
|
636
|
+
if (firstDefined(o[target]) != null) return;
|
|
637
|
+
const val = firstDefined(...sources.map((k) => o[k]));
|
|
638
|
+
if (val != null) o[target] = val;
|
|
639
|
+
}
|
|
640
|
+
function derivePurposeIfMissing(o, build) {
|
|
641
|
+
const purposeText = String(o.purposeText ?? o.purpose ?? "").trim();
|
|
642
|
+
if (purposeText) {
|
|
643
|
+
o.purposeText = purposeText;
|
|
644
|
+
return;
|
|
645
|
+
}
|
|
646
|
+
const derived = build(o);
|
|
647
|
+
if (derived) o.purposeText = derived;
|
|
648
|
+
}
|
|
649
|
+
function isLongToDirection(o) {
|
|
650
|
+
if (firstDefined(o.direction) != null) return;
|
|
651
|
+
const raw = o.isLong;
|
|
652
|
+
if (typeof raw === "boolean") {
|
|
653
|
+
o.direction = raw ? "long" : "short";
|
|
654
|
+
return;
|
|
655
|
+
}
|
|
656
|
+
if (typeof raw === "string") {
|
|
657
|
+
const t = raw.trim().toLowerCase();
|
|
658
|
+
if (t === "true" || t === "long") o.direction = "long";
|
|
659
|
+
else if (t === "false" || t === "short") o.direction = "short";
|
|
660
|
+
}
|
|
661
|
+
}
|
|
662
|
+
function preprocessGmxGmBuildInput(raw) {
|
|
663
|
+
const o = preprocessObject(raw);
|
|
664
|
+
if (!o) return raw;
|
|
665
|
+
aliasField(o, "marketSymbol", "symbol", "market", "gmSymbol");
|
|
666
|
+
derivePurposeIfMissing(o, (x) => {
|
|
667
|
+
const sym = String(x.marketSymbol ?? x.symbol ?? "").trim();
|
|
668
|
+
const amt = String(x.collateralAmountHuman ?? x.gmAmountHuman ?? "").trim();
|
|
669
|
+
if (sym && amt) return `GMX GM ${sym} ${amt}`;
|
|
670
|
+
return void 0;
|
|
671
|
+
});
|
|
672
|
+
return o;
|
|
673
|
+
}
|
|
674
|
+
function preprocessGmxDecreaseInput(raw) {
|
|
675
|
+
const o = preprocessObject(raw);
|
|
676
|
+
if (!o) return raw;
|
|
677
|
+
aliasField(o, "symbol", "symbol", "indexName", "marketSymbol");
|
|
678
|
+
aliasField(o, "sizeUsdHuman", "sizeUsdHuman", "sizeUsd", "sizeInUsd");
|
|
679
|
+
aliasField(o, "collateralToken", "collateralToken", "collateralSymbol");
|
|
680
|
+
isLongToDirection(o);
|
|
681
|
+
derivePurposeIfMissing(o, (x) => {
|
|
682
|
+
const sym = String(x.symbol ?? "").trim();
|
|
683
|
+
const dir = String(x.direction ?? "").trim();
|
|
684
|
+
const size = String(x.sizeUsdHuman ?? "").trim();
|
|
685
|
+
if (sym && dir && size) return `GMX decrease ${dir} ${sym} ${size} USD`;
|
|
686
|
+
return void 0;
|
|
687
|
+
});
|
|
688
|
+
return o;
|
|
689
|
+
}
|
|
690
|
+
function preprocessGmxIncreaseInput(raw) {
|
|
691
|
+
const o = preprocessObject(raw);
|
|
692
|
+
if (!o) return raw;
|
|
693
|
+
aliasField(o, "symbol", "symbol", "indexName", "marketSymbol");
|
|
694
|
+
derivePurposeIfMissing(o, (x) => {
|
|
695
|
+
const sym = String(x.symbol ?? "").trim();
|
|
696
|
+
const dir = String(x.direction ?? "").trim();
|
|
697
|
+
const size = String(x.sizeUsdHuman ?? "").trim();
|
|
698
|
+
if (sym && dir && size) return `GMX ${dir} ${sym} ${size} USD`;
|
|
699
|
+
return void 0;
|
|
700
|
+
});
|
|
701
|
+
return o;
|
|
702
|
+
}
|
|
703
|
+
function preprocessHyperliquidCoinInput(raw) {
|
|
704
|
+
const o = preprocessObject(raw);
|
|
705
|
+
if (!o) return raw;
|
|
706
|
+
aliasField(o, "coin", "coin", "name", "resolvedCoin", "symbol");
|
|
707
|
+
return o;
|
|
708
|
+
}
|
|
709
|
+
function preprocessHyperliquidLimitOrderInput(raw) {
|
|
710
|
+
const o = preprocessHyperliquidCoinInput(raw);
|
|
711
|
+
if (!preprocessObject(o)) return raw;
|
|
712
|
+
aliasField(o, "limitPxHuman", "limitPxHuman", "limitPx", "markPx");
|
|
713
|
+
aliasField(o, "szHuman", "szHuman", "sz", "size");
|
|
714
|
+
derivePurposeIfMissing(o, (x) => {
|
|
715
|
+
const coin = String(x.coin ?? "").trim();
|
|
716
|
+
const side = x.isBuy === true || x.isBuy === "true" ? "buy" : "sell";
|
|
717
|
+
const sz = String(x.szHuman ?? "").trim();
|
|
718
|
+
if (coin && sz) return `HL limit ${side} ${coin} ${sz}`;
|
|
719
|
+
return void 0;
|
|
720
|
+
});
|
|
721
|
+
return o;
|
|
722
|
+
}
|
|
723
|
+
function preprocessHyperliquidCloseInput(raw) {
|
|
724
|
+
const o = preprocessHyperliquidCoinInput(raw);
|
|
725
|
+
if (!preprocessObject(o)) return raw;
|
|
726
|
+
aliasField(o, "szHuman", "szHuman", "sz", "size");
|
|
727
|
+
aliasField(o, "limitPxHuman", "limitPxHuman", "limitPx", "markPx");
|
|
728
|
+
derivePurposeIfMissing(o, (x) => {
|
|
729
|
+
const coin = String(x.coin ?? "").trim();
|
|
730
|
+
const sz = String(x.szHuman ?? "").trim();
|
|
731
|
+
if (coin && sz) return `HL close ${coin} ${sz}`;
|
|
732
|
+
return void 0;
|
|
733
|
+
});
|
|
734
|
+
return o;
|
|
735
|
+
}
|
|
736
|
+
function preprocessHyperliquidVaultDepositInput(raw) {
|
|
737
|
+
const o = preprocessObject(raw);
|
|
738
|
+
if (!o) return raw;
|
|
739
|
+
derivePurposeIfMissing(o, (x) => {
|
|
740
|
+
const name = String(x.vaultName ?? "").trim();
|
|
741
|
+
const usd = String(x.usdHuman ?? "").trim();
|
|
742
|
+
if (name && usd) return `HL vault deposit ${usd} into ${name}`;
|
|
743
|
+
if (usd) return `HL vault deposit ${usd}`;
|
|
744
|
+
return void 0;
|
|
745
|
+
});
|
|
746
|
+
return o;
|
|
747
|
+
}
|
|
748
|
+
function preprocessHyperliquidVaultWithdrawInput(raw) {
|
|
749
|
+
const o = preprocessObject(raw);
|
|
750
|
+
if (!o) return raw;
|
|
751
|
+
aliasField(o, "usdHuman", "usdHuman", "equity");
|
|
752
|
+
derivePurposeIfMissing(o, (x) => {
|
|
753
|
+
const usd = String(x.usdHuman ?? "").trim();
|
|
754
|
+
if (usd) return `HL vault withdraw ${usd}`;
|
|
755
|
+
return void 0;
|
|
756
|
+
});
|
|
757
|
+
return o;
|
|
758
|
+
}
|
|
759
|
+
function preprocessHyperliquidUndelegateInput(raw) {
|
|
760
|
+
const o = preprocessObject(raw);
|
|
761
|
+
if (!o) return raw;
|
|
762
|
+
aliasField(o, "hypeHuman", "hypeHuman", "amount");
|
|
763
|
+
return o;
|
|
764
|
+
}
|
|
765
|
+
function preprocessUniswapLpCreateInput(raw) {
|
|
766
|
+
const o = preprocessObject(raw);
|
|
767
|
+
if (!o) return raw;
|
|
768
|
+
aliasField(o, "poolPreset", "poolPreset", "presetId");
|
|
769
|
+
const pool = o.existingPool;
|
|
770
|
+
if (pool && typeof pool === "object" && !Array.isArray(pool)) {
|
|
771
|
+
const p = pool;
|
|
772
|
+
aliasField(p, "token0Address", "token0Address", "token0");
|
|
773
|
+
aliasField(p, "token1Address", "token1Address", "token1");
|
|
774
|
+
aliasField(p, "poolReference", "poolReference", "poolId");
|
|
775
|
+
}
|
|
776
|
+
return o;
|
|
777
|
+
}
|
|
778
|
+
function preprocessUniswapLpNftInput(raw) {
|
|
779
|
+
const o = preprocessObject(raw);
|
|
780
|
+
if (!o) return raw;
|
|
781
|
+
aliasField(o, "nftTokenId", "nftTokenId", "tokenId");
|
|
782
|
+
return o;
|
|
783
|
+
}
|
|
784
|
+
function preprocessUniswapLpCollectInput(raw) {
|
|
785
|
+
const o = preprocessObject(raw);
|
|
786
|
+
if (!o) return raw;
|
|
787
|
+
aliasField(o, "tokenId", "tokenId", "nftTokenId");
|
|
788
|
+
return o;
|
|
789
|
+
}
|
|
790
|
+
function tokenAddressFromQuoteSnapshot(quote, side) {
|
|
791
|
+
const inner = quote.quote;
|
|
792
|
+
if (!inner || typeof inner !== "object" || Array.isArray(inner)) return void 0;
|
|
793
|
+
const row = inner[side];
|
|
794
|
+
const token = row?.token;
|
|
795
|
+
return typeof token === "string" && token.trim() ? token.trim() : void 0;
|
|
796
|
+
}
|
|
797
|
+
function preprocessUniswapBuildSwapInput(raw) {
|
|
798
|
+
const o = preprocessObject(raw);
|
|
799
|
+
if (!o) return raw;
|
|
800
|
+
aliasField(o, "fullQuoteSnapshot", "fullQuoteSnapshot", "fullQuoteFromPermit", "quote");
|
|
801
|
+
const createResp = firstDefined(o.createSwapResponse, o.create_swap_response, o.createSwap);
|
|
802
|
+
if (createResp != null) o.createSwapResponse = createResp;
|
|
803
|
+
if (!firstDefined(o.swap) && createResp && typeof createResp === "object" && !Array.isArray(createResp)) {
|
|
804
|
+
const nested = createResp.swap;
|
|
805
|
+
if (nested != null) o.swap = nested;
|
|
806
|
+
}
|
|
807
|
+
const quote = o.fullQuoteSnapshot && typeof o.fullQuoteSnapshot === "object" && !Array.isArray(o.fullQuoteSnapshot) ? o.fullQuoteSnapshot : null;
|
|
808
|
+
if (quote && !firstDefined(o.tokenIn)) {
|
|
809
|
+
const tokenIn = tokenAddressFromQuoteSnapshot(quote, "input");
|
|
810
|
+
if (tokenIn) o.tokenIn = tokenIn;
|
|
811
|
+
}
|
|
812
|
+
derivePurposeIfMissing(o, () => "Uniswap V4 swap");
|
|
813
|
+
return o;
|
|
814
|
+
}
|
|
815
|
+
function preprocessUniswapBuildLpInput(raw) {
|
|
816
|
+
const o = preprocessUniswapLpNftInput(raw);
|
|
817
|
+
if (!preprocessObject(o)) return raw;
|
|
818
|
+
derivePurposeIfMissing(o, () => "Uniswap V4 liquidity");
|
|
819
|
+
return o;
|
|
820
|
+
}
|
|
821
|
+
function preprocessCurveBuildSwapInput(raw) {
|
|
822
|
+
const o = preprocessObject(raw);
|
|
823
|
+
if (!o) return raw;
|
|
824
|
+
const quote = o.quoteSnapshot && typeof o.quoteSnapshot === "object" && !Array.isArray(o.quoteSnapshot) ? o.quoteSnapshot : o;
|
|
825
|
+
aliasField(o, "tokenIn", "tokenIn", "tokenInRouterId", "tokenInAddress");
|
|
826
|
+
aliasField(o, "tokenOut", "tokenOut", "tokenOutRouterId", "tokenOutAddress");
|
|
827
|
+
aliasField(o, "amountHuman", "amountHuman", "inputAmount");
|
|
828
|
+
if (!firstDefined(o.tokenIn) && firstDefined(quote.tokenInRouterId)) {
|
|
829
|
+
o.tokenIn = quote.tokenInRouterId;
|
|
830
|
+
}
|
|
831
|
+
if (!firstDefined(o.tokenOut) && firstDefined(quote.tokenOutRouterId)) {
|
|
832
|
+
o.tokenOut = quote.tokenOutRouterId;
|
|
833
|
+
}
|
|
834
|
+
if (!firstDefined(o.amountHuman) && firstDefined(quote.inputAmount)) {
|
|
835
|
+
o.amountHuman = quote.inputAmount;
|
|
836
|
+
}
|
|
837
|
+
derivePurposeIfMissing(o, (x) => {
|
|
838
|
+
const amt = String(x.amountHuman ?? "").trim();
|
|
839
|
+
if (amt) return `Curve swap ${amt}`;
|
|
840
|
+
return void 0;
|
|
841
|
+
});
|
|
842
|
+
return o;
|
|
843
|
+
}
|
|
844
|
+
function preprocessMorphoBlueCollateralDepositInput(raw) {
|
|
845
|
+
const o = preprocessObject(raw);
|
|
846
|
+
if (!o) return raw;
|
|
847
|
+
aliasField(o, "collateralToken", "collateralToken", "collateralTokenAddress");
|
|
848
|
+
aliasField(o, "marketId", "marketId", "marketID");
|
|
849
|
+
derivePurposeIfMissing(o, (x) => {
|
|
850
|
+
const amt = String(x.amountHuman ?? "").trim();
|
|
851
|
+
const label = String(x.marketLabel ?? "").trim();
|
|
852
|
+
if (amt && label) return `Morpho Blue collateral ${amt} for ${label}`;
|
|
853
|
+
if (amt) return `Morpho Blue collateral deposit ${amt}`;
|
|
854
|
+
return void 0;
|
|
855
|
+
});
|
|
856
|
+
return o;
|
|
857
|
+
}
|
|
858
|
+
function preprocessMorphoBlueBorrowRepayInput(raw) {
|
|
859
|
+
const o = preprocessObject(raw);
|
|
860
|
+
if (!o) return raw;
|
|
861
|
+
aliasField(o, "loanToken", "loanToken", "loanTokenAddress");
|
|
862
|
+
return o;
|
|
863
|
+
}
|
|
864
|
+
function preprocessEulerV2IsolatedLendInput(raw) {
|
|
865
|
+
const o = preprocessObject(raw);
|
|
866
|
+
if (!o) return raw;
|
|
867
|
+
aliasField(o, "vault", "vault", "evaultAddress");
|
|
868
|
+
aliasField(o, "underlyingAddress", "underlyingAddress", "underlying");
|
|
869
|
+
aliasField(o, "marketName", "marketName", "vaultName");
|
|
870
|
+
derivePurposeIfMissing(o, (x) => {
|
|
871
|
+
const amt = String(x.assetAmountHuman ?? x.amountHuman ?? "").trim();
|
|
872
|
+
const label = String(x.marketName ?? x.vaultName ?? "").trim();
|
|
873
|
+
if (amt && label) return `Euler lend ${amt} into ${label}`;
|
|
874
|
+
if (amt) return `Euler vault deposit ${amt}`;
|
|
875
|
+
return void 0;
|
|
876
|
+
});
|
|
877
|
+
return o;
|
|
878
|
+
}
|
|
879
|
+
function preprocessAaveMultisignInput(action) {
|
|
880
|
+
return (raw) => {
|
|
881
|
+
const o = preprocessObject(raw);
|
|
882
|
+
if (!o) return raw;
|
|
883
|
+
derivePurposeIfMissing(o, (x) => {
|
|
884
|
+
const amt = String(x.amountHuman ?? "").trim();
|
|
885
|
+
const asset = String(x.underlying ?? "").trim();
|
|
886
|
+
if (amt && asset) return `Aave ${action} ${amt} ${asset}`;
|
|
887
|
+
if (amt) return `Aave ${action} ${amt}`;
|
|
888
|
+
return void 0;
|
|
889
|
+
});
|
|
890
|
+
return o;
|
|
891
|
+
};
|
|
892
|
+
}
|
|
893
|
+
|
|
894
|
+
// src/agent/schemas/uniswapV4.ts
|
|
622
895
|
var uniswapQuoteTradeTypeSchema = zod.z.enum(["EXACT_INPUT", "EXACT_OUTPUT"]);
|
|
623
896
|
var mcpUniswapV4QuoteInputSchema = zod.z.object({
|
|
624
897
|
type: uniswapQuoteTradeTypeSchema.describe("EXACT_INPUT or EXACT_OUTPUT"),
|
|
625
898
|
amount: zod.z.string().min(1).describe("Amount in token-in base units (wei string for ERC-20)"),
|
|
626
899
|
tokenIn: zod.z.string().min(1).describe("Input token; 0x0 for native ETH"),
|
|
627
900
|
tokenOut: zod.z.string().min(1).describe("Output token address"),
|
|
628
|
-
chainId:
|
|
901
|
+
chainId: agentEvmChainIdSchema.describe("tokenInChainId / same-chain default"),
|
|
629
902
|
uniswapApiKey: zod.z.string().min(1).describe("Uniswap Trade API x-api-key"),
|
|
630
903
|
swapper: evmAddressSchema.optional().describe("MPC executor; omit if keyGen + managementNodeUrl provided"),
|
|
631
904
|
slippage: zod.z.union([zod.z.number(), zod.z.string()]).optional().describe("Slippage percent; omit for API auto slippage"),
|
|
@@ -633,7 +906,7 @@ var mcpUniswapV4QuoteInputSchema = zod.z.object({
|
|
|
633
906
|
managementNodeUrl: zod.z.string().min(1).optional().describe("MPC node base URL; required with keyGen when swapper is omitted"),
|
|
634
907
|
tokenInChainId: zod.z.union([zod.z.number(), zod.z.string()]).optional(),
|
|
635
908
|
tokenOutChainId: zod.z.union([zod.z.number(), zod.z.string()]).optional(),
|
|
636
|
-
permit2Disabled:
|
|
909
|
+
permit2Disabled: agentOptionalBooleanSchema(),
|
|
637
910
|
baseUrl: zod.z.string().optional(),
|
|
638
911
|
universalRouterVersion: zod.z.string().optional()
|
|
639
912
|
});
|
|
@@ -655,18 +928,21 @@ var mcpUniswapV4CreateSwapOutputSchema = zod.z.object({
|
|
|
655
928
|
}).passthrough().describe("{ swap: TransactionRequest, requestId?, gasFee? }");
|
|
656
929
|
var swapTxRequestSchema = jsonObjectSchema.describe("swap field from create_swap response (to, data, value)");
|
|
657
930
|
var mcpUniswapV4BuildSwapMultisignInputSchema = withMultisignKeySourceRefine(
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
931
|
+
zod.z.preprocess(
|
|
932
|
+
preprocessUniswapBuildSwapInput,
|
|
933
|
+
evmMultisignCommonInputSchema.extend({
|
|
934
|
+
tokenIn: evmAddressSchema.describe("Token in; 0x0 for native ETH"),
|
|
662
935
|
swap: swapTxRequestSchema,
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
936
|
+
createSwapResponse: zod.z.object({
|
|
937
|
+
swap: swapTxRequestSchema,
|
|
938
|
+
requestId: zod.z.string().optional(),
|
|
939
|
+
gasFee: zod.z.string().optional()
|
|
940
|
+
}).passthrough().describe("Full create_swap response"),
|
|
941
|
+
fullQuoteSnapshot: jsonObjectSchema.describe("Quote JSON used for the swap"),
|
|
942
|
+
swapDeadlineUnix: zod.z.number().describe("Same deadline passed to create_swap"),
|
|
943
|
+
slippagePercent: zod.z.number().optional().describe("Extra approve headroom for EXACT_OUTPUT")
|
|
944
|
+
})
|
|
945
|
+
)
|
|
670
946
|
);
|
|
671
947
|
var lpExistingPoolSchema = zod.z.object({
|
|
672
948
|
token0Address: evmAddressSchema,
|
|
@@ -696,22 +972,26 @@ var lpTickBoundsSchema = zod.z.object({
|
|
|
696
972
|
var lpCommonApiInputSchema = zod.z.object({
|
|
697
973
|
uniswapApiKey: zod.z.string().min(1),
|
|
698
974
|
walletAddress: evmAddressSchema.optional(),
|
|
699
|
-
chainId:
|
|
975
|
+
chainId: agentEvmChainIdSchema,
|
|
700
976
|
slippageTolerance: zod.z.number().optional(),
|
|
701
|
-
simulateTransaction:
|
|
977
|
+
simulateTransaction: agentOptionalBooleanSchema(),
|
|
702
978
|
baseUrl: zod.z.string().optional(),
|
|
703
979
|
keyGen: zod.z.string().optional(),
|
|
704
980
|
managementNodeUrl: zod.z.string().optional()
|
|
705
981
|
});
|
|
706
|
-
var mcpUniswapV4LpCreatePositionInputSchema =
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
982
|
+
var mcpUniswapV4LpCreatePositionInputSchema = zod.z.preprocess(
|
|
983
|
+
preprocessUniswapLpCreateInput,
|
|
984
|
+
lpCommonApiInputSchema.extend({
|
|
985
|
+
poolPreset: zod.z.string().optional().describe("presetId from ctm_uniswap_v4_list_lp_pools \u2014 server resolves existingPool"),
|
|
986
|
+
existingPool: lpExistingPoolSchema.optional(),
|
|
987
|
+
newPool: lpNewPoolSchema.optional(),
|
|
988
|
+
independentToken: lpIndependentTokenSchema,
|
|
989
|
+
priceBounds: lpPriceBoundsSchema.optional(),
|
|
990
|
+
tickBounds: lpTickBoundsSchema.optional()
|
|
991
|
+
})
|
|
992
|
+
);
|
|
713
993
|
var mcpUniswapV4LpListPoolsInputSchema = zod.z.object({
|
|
714
|
-
chainId:
|
|
994
|
+
chainId: agentEvmChainIdSchema,
|
|
715
995
|
pair: zod.z.string().optional().describe("Optional filter, e.g. eth-usdc or ETH/USDC")
|
|
716
996
|
});
|
|
717
997
|
var mcpUniswapV4LpListPoolsOutputSchema = zod.z.object({
|
|
@@ -738,26 +1018,35 @@ var mcpUniswapV4LpListPoolsOutputSchema = zod.z.object({
|
|
|
738
1018
|
notes: zod.z.string()
|
|
739
1019
|
});
|
|
740
1020
|
var mcpUniswapV4LpCreatePositionOutputSchema = jsonObjectSchema;
|
|
741
|
-
var mcpUniswapV4LpIncreaseInputSchema =
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
1021
|
+
var mcpUniswapV4LpIncreaseInputSchema = zod.z.preprocess(
|
|
1022
|
+
preprocessUniswapLpNftInput,
|
|
1023
|
+
lpCommonApiInputSchema.extend({
|
|
1024
|
+
token0Address: evmAddressSchema,
|
|
1025
|
+
token1Address: evmAddressSchema,
|
|
1026
|
+
nftTokenId: zod.z.union([zod.z.string(), zod.z.number()]).describe("tokenId from lp_list_positions"),
|
|
1027
|
+
independentToken: lpIndependentTokenSchema
|
|
1028
|
+
})
|
|
1029
|
+
);
|
|
747
1030
|
var mcpUniswapV4LpIncreaseOutputSchema = jsonObjectSchema;
|
|
748
|
-
var mcpUniswapV4LpDecreaseInputSchema =
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
1031
|
+
var mcpUniswapV4LpDecreaseInputSchema = zod.z.preprocess(
|
|
1032
|
+
preprocessUniswapLpNftInput,
|
|
1033
|
+
lpCommonApiInputSchema.extend({
|
|
1034
|
+
token0Address: evmAddressSchema,
|
|
1035
|
+
token1Address: evmAddressSchema,
|
|
1036
|
+
nftTokenId: zod.z.union([zod.z.string(), zod.z.number()]).describe("tokenId from lp_list_positions"),
|
|
1037
|
+
liquidityPercentageToDecrease: zod.z.number().int().min(1).max(100)
|
|
1038
|
+
})
|
|
1039
|
+
);
|
|
754
1040
|
var mcpUniswapV4LpDecreaseOutputSchema = jsonObjectSchema;
|
|
755
|
-
var mcpUniswapV4LpClaimInputSchema =
|
|
756
|
-
|
|
757
|
-
|
|
1041
|
+
var mcpUniswapV4LpClaimInputSchema = zod.z.preprocess(
|
|
1042
|
+
preprocessUniswapLpCollectInput,
|
|
1043
|
+
lpCommonApiInputSchema.extend({
|
|
1044
|
+
tokenId: zod.z.union([zod.z.string(), zod.z.number()]).describe("tokenId from lp_list_positions")
|
|
1045
|
+
})
|
|
1046
|
+
);
|
|
758
1047
|
var mcpUniswapV4LpClaimOutputSchema = jsonObjectSchema;
|
|
759
1048
|
var mcpUniswapV4LpListPositionsInputSchema = zod.z.object({
|
|
760
|
-
chainId:
|
|
1049
|
+
chainId: agentEvmChainIdSchema,
|
|
761
1050
|
keyGenId: zod.z.string().min(1).optional(),
|
|
762
1051
|
walletAddress: evmAddressSchema.optional(),
|
|
763
1052
|
positionManagerAddress: evmAddressSchema.optional()
|
|
@@ -775,7 +1064,7 @@ var mcpUniswapV4LpListPositionsOutputSchema = zod.z.object({
|
|
|
775
1064
|
)
|
|
776
1065
|
});
|
|
777
1066
|
var mcpUniswapV4RegisterPositionNftInputSchema = zod.z.object({
|
|
778
|
-
chainId:
|
|
1067
|
+
chainId: agentEvmChainIdSchema,
|
|
779
1068
|
tokenId: zod.z.union([zod.z.string(), zod.z.number()]),
|
|
780
1069
|
keyGenId: zod.z.string().min(1).optional(),
|
|
781
1070
|
positionManagerAddress: evmAddressSchema.optional(),
|
|
@@ -789,7 +1078,7 @@ var mcpUniswapV4RegisterPositionNftOutputSchema = zod.z.object({
|
|
|
789
1078
|
positionManager: evmAddressSchema
|
|
790
1079
|
});
|
|
791
1080
|
var mcpUniswapV4RegisterPositionFromMintTxInputSchema = zod.z.object({
|
|
792
|
-
chainId:
|
|
1081
|
+
chainId: agentEvmChainIdSchema,
|
|
793
1082
|
txHash: zod.z.string().min(1),
|
|
794
1083
|
keyGenId: zod.z.string().min(1).optional(),
|
|
795
1084
|
walletAddress: evmAddressSchema.optional(),
|
|
@@ -808,28 +1097,37 @@ var lpBuildCommonSchema = {
|
|
|
808
1097
|
poolReference: zod.z.string().optional()
|
|
809
1098
|
};
|
|
810
1099
|
var mcpUniswapV4BuildMintLiquidityMultisignInputSchema = withMultisignKeySourceRefine(
|
|
811
|
-
evmMultisignCommonInputSchema.extend(lpBuildCommonSchema)
|
|
1100
|
+
zod.z.preprocess(preprocessUniswapBuildLpInput, evmMultisignCommonInputSchema.extend(lpBuildCommonSchema))
|
|
812
1101
|
);
|
|
813
1102
|
var mcpUniswapV4BuildIncreaseLiquidityMultisignInputSchema = withMultisignKeySourceRefine(
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
1103
|
+
zod.z.preprocess(
|
|
1104
|
+
preprocessUniswapBuildLpInput,
|
|
1105
|
+
evmMultisignCommonInputSchema.extend({
|
|
1106
|
+
...lpBuildCommonSchema,
|
|
1107
|
+
nftTokenId: zod.z.union([zod.z.string(), zod.z.number()]).describe("tokenId from lp_list_positions")
|
|
1108
|
+
})
|
|
1109
|
+
)
|
|
818
1110
|
);
|
|
819
1111
|
var mcpUniswapV4BuildDecreaseLiquidityMultisignInputSchema = withMultisignKeySourceRefine(
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
1112
|
+
zod.z.preprocess(
|
|
1113
|
+
preprocessUniswapBuildLpInput,
|
|
1114
|
+
evmMultisignCommonInputSchema.extend({
|
|
1115
|
+
...lpBuildCommonSchema,
|
|
1116
|
+
nftTokenId: zod.z.union([zod.z.string(), zod.z.number()])
|
|
1117
|
+
})
|
|
1118
|
+
)
|
|
824
1119
|
);
|
|
825
1120
|
var mcpUniswapV4BuildCollectFeesMultisignInputSchema = withMultisignKeySourceRefine(
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
1121
|
+
zod.z.preprocess(
|
|
1122
|
+
preprocessUniswapBuildLpInput,
|
|
1123
|
+
evmMultisignCommonInputSchema.extend({
|
|
1124
|
+
...lpBuildCommonSchema,
|
|
1125
|
+
nftTokenId: zod.z.union([zod.z.string(), zod.z.number()])
|
|
1126
|
+
})
|
|
1127
|
+
)
|
|
830
1128
|
);
|
|
831
1129
|
var mcpCurveDaoQuoteInputSchema = zod.z.object({
|
|
832
|
-
chainId:
|
|
1130
|
+
chainId: agentEvmChainIdSchema.describe("EVM chain id (rpcUrl resolved from get_chain_registry rpcGateway)"),
|
|
833
1131
|
rpcUrl: zod.z.string().min(1).optional().describe("JSON-RPC URL; continuum-mcp-server injects from chain registry \u2014 do not pass a public RPC URL"),
|
|
834
1132
|
tokenIn: zod.z.string().min(1).describe("Input token address, or 0xeeee\u2026 / 0x0 / eth for native"),
|
|
835
1133
|
tokenOut: zod.z.string().min(1).describe("Output token address or 0xeeee\u2026 native placeholder"),
|
|
@@ -840,13 +1138,112 @@ var mcpCurveDaoQuoteOutputSchema = jsonObjectSchema.describe(
|
|
|
840
1138
|
"Curve router quote: { inputAmount, output, route, priceImpactPercent?, tokenInRouterId, tokenOutRouterId }"
|
|
841
1139
|
);
|
|
842
1140
|
var mcpCurveDaoBuildSwapMultisignInputSchema = withMultisignKeySourceRefine(
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
1141
|
+
zod.z.preprocess(
|
|
1142
|
+
preprocessCurveBuildSwapInput,
|
|
1143
|
+
evmMultisignCommonInputSchema.extend({
|
|
1144
|
+
tokenIn: evmAddressSchema.describe("ERC-20 sold (native in uses WETH path in UI)"),
|
|
1145
|
+
tokenOut: zod.z.string().min(1).describe("Output token or 0xeeee\u2026 native placeholder"),
|
|
1146
|
+
amountHuman: zod.z.string().min(1).describe("Human-readable amount of tokenIn"),
|
|
1147
|
+
slippagePercent: zod.z.number().gt(0).lt(100).describe("Slippage 0\u2013100 exclusive"),
|
|
1148
|
+
quoteSnapshot: jsonObjectSchema.optional().describe("Optional quote row from ctm_curve_dao_quote \u2014 aliases tokenIn/tokenOut/amountHuman")
|
|
1149
|
+
})
|
|
1150
|
+
)
|
|
849
1151
|
);
|
|
1152
|
+
var morphoExposureRowSchema = zod.z.object({
|
|
1153
|
+
label: zod.z.string(),
|
|
1154
|
+
allocatedUsdLabel: zod.z.string(),
|
|
1155
|
+
allocationPercentLabel: zod.z.string()
|
|
1156
|
+
});
|
|
1157
|
+
function preprocessMorphoVaultDepositInput(raw) {
|
|
1158
|
+
if (!raw || typeof raw !== "object" || Array.isArray(raw)) return raw;
|
|
1159
|
+
const o = { ...raw };
|
|
1160
|
+
const vaultAddr = o.vaultAddress ?? o.vault;
|
|
1161
|
+
if (vaultAddr != null) {
|
|
1162
|
+
o.vaultAddress = vaultAddr;
|
|
1163
|
+
o.vault = vaultAddr;
|
|
1164
|
+
}
|
|
1165
|
+
const underlyingAddr = o.underlyingAddress ?? o.underlying;
|
|
1166
|
+
if (underlyingAddr != null) {
|
|
1167
|
+
o.underlyingAddress = underlyingAddr;
|
|
1168
|
+
o.underlying = underlyingAddr;
|
|
1169
|
+
}
|
|
1170
|
+
const purposeText = String(o.purposeText ?? o.purpose ?? "").trim();
|
|
1171
|
+
if (!purposeText) {
|
|
1172
|
+
const amt = String(o.amountHuman ?? "").trim();
|
|
1173
|
+
const label = String(o.vaultName ?? o.vaultSymbol ?? "").trim();
|
|
1174
|
+
if (amt && label) o.purposeText = `Deposit ${amt} into ${label}`;
|
|
1175
|
+
else if (amt) o.purposeText = `Morpho vault deposit ${amt}`;
|
|
1176
|
+
}
|
|
1177
|
+
return o;
|
|
1178
|
+
}
|
|
1179
|
+
function preprocessMorphoVaultWithdrawInput(raw) {
|
|
1180
|
+
if (!raw || typeof raw !== "object" || Array.isArray(raw)) return raw;
|
|
1181
|
+
const o = { ...raw };
|
|
1182
|
+
const vaultAddr = o.vaultAddress ?? o.vault;
|
|
1183
|
+
if (vaultAddr != null) {
|
|
1184
|
+
o.vaultAddress = vaultAddr;
|
|
1185
|
+
o.vault = vaultAddr;
|
|
1186
|
+
}
|
|
1187
|
+
const purposeText = String(o.purposeText ?? o.purpose ?? "").trim();
|
|
1188
|
+
if (!purposeText) {
|
|
1189
|
+
const amt = String(o.amountHuman ?? "").trim();
|
|
1190
|
+
const label = String(o.vaultName ?? o.vaultSymbol ?? "").trim();
|
|
1191
|
+
if (amt && label) o.purposeText = `Withdraw ${amt} from ${label}`;
|
|
1192
|
+
else if (amt) o.purposeText = `Morpho vault withdraw ${amt}`;
|
|
1193
|
+
}
|
|
1194
|
+
return o;
|
|
1195
|
+
}
|
|
1196
|
+
var mcpMorphoFetchEarnVaultsInputSchema = zod.z.object({
|
|
1197
|
+
chainId: agentEvmChainIdSchema,
|
|
1198
|
+
underlying: zod.z.string().trim().min(1).optional().describe("Deposit asset symbol (e.g. USDC) or ERC-20 address. Omit to search all listed vaults on the chain."),
|
|
1199
|
+
query: zod.z.string().trim().min(1).optional().describe("Case-insensitive filter on vault name, symbol, address, or underlying symbol (e.g. Steakhouse, bbqUSDC)."),
|
|
1200
|
+
limit: zod.z.number().int().min(1).max(200).optional().describe("Max rows (default 50).")
|
|
1201
|
+
});
|
|
1202
|
+
var mcpMorphoFetchEarnVaultsOutputSchema = zod.z.object({
|
|
1203
|
+
vaults: zod.z.array(
|
|
1204
|
+
zod.z.object({
|
|
1205
|
+
vaultAddress: zod.z.string(),
|
|
1206
|
+
vaultName: zod.z.string(),
|
|
1207
|
+
vaultSymbol: zod.z.string(),
|
|
1208
|
+
underlyingAddress: zod.z.string(),
|
|
1209
|
+
underlyingSymbol: zod.z.string(),
|
|
1210
|
+
apy: zod.z.string(),
|
|
1211
|
+
netApy: zod.z.string(),
|
|
1212
|
+
netApy7d: zod.z.string(),
|
|
1213
|
+
netApy30d: zod.z.string(),
|
|
1214
|
+
netApy90d: zod.z.string(),
|
|
1215
|
+
performanceFee: zod.z.string(),
|
|
1216
|
+
managementFee: zod.z.string().nullable(),
|
|
1217
|
+
totalDepositsUsd: zod.z.string(),
|
|
1218
|
+
liquidityUsd: zod.z.string(),
|
|
1219
|
+
exposure: zod.z.array(morphoExposureRowSchema)
|
|
1220
|
+
})
|
|
1221
|
+
)
|
|
1222
|
+
});
|
|
1223
|
+
var mcpMorphoFetchBlueMarketsInputSchema = zod.z.object({
|
|
1224
|
+
chainId: agentEvmChainIdSchema,
|
|
1225
|
+
collateral: zod.z.string().trim().min(1).optional().describe("Collateral asset symbol or address (e.g. WETH, cbETH)."),
|
|
1226
|
+
loan: zod.z.string().trim().min(1).optional().describe("Loan asset symbol or address (e.g. USDC)."),
|
|
1227
|
+
query: zod.z.string().trim().min(1).optional().describe("Filter on market label, symbols, or marketId."),
|
|
1228
|
+
limit: zod.z.number().int().min(1).max(200).optional()
|
|
1229
|
+
});
|
|
1230
|
+
var mcpMorphoFetchBlueMarketsOutputSchema = zod.z.object({
|
|
1231
|
+
markets: zod.z.array(
|
|
1232
|
+
zod.z.object({
|
|
1233
|
+
marketId: zod.z.string().describe("Pass to build_blue_* multisign tools"),
|
|
1234
|
+
marketLabel: zod.z.string(),
|
|
1235
|
+
morphoBlueAddress: zod.z.string(),
|
|
1236
|
+
collateralTokenAddress: zod.z.string().describe("Copy as collateralToken for supply collateral"),
|
|
1237
|
+
collateralTokenSymbol: zod.z.string(),
|
|
1238
|
+
collateralTokenDecimals: zod.z.number().int(),
|
|
1239
|
+
loanTokenAddress: zod.z.string().describe("Copy as loanToken for borrow/repay"),
|
|
1240
|
+
loanTokenSymbol: zod.z.string(),
|
|
1241
|
+
loanTokenDecimals: zod.z.number().int(),
|
|
1242
|
+
borrowApyLabel: zod.z.string(),
|
|
1243
|
+
supplyApyLabel: zod.z.string()
|
|
1244
|
+
})
|
|
1245
|
+
)
|
|
1246
|
+
});
|
|
850
1247
|
var mcpServerCommonInputSchema = zod.z.object({
|
|
851
1248
|
keyGenId: zod.z.string().min(1).describe("KeyGen id from fetch_key_gen_result / node preferred KeyGen"),
|
|
852
1249
|
chainId: zod.z.number().int().positive().describe("EVM chain id; RPC and gas config resolved from chain registry"),
|
|
@@ -861,9 +1258,10 @@ var mcpServerSubmitOutputSchema = zod.z.object({
|
|
|
861
1258
|
status: zod.z.literal("submitted").optional().describe("Present when POST /multiSignRequest succeeded. Confirms the request exists on the node."),
|
|
862
1259
|
followUp: zod.z.string().optional().describe(
|
|
863
1260
|
"Next MCP lifecycle steps. Do not call the same build_*_multisign tool again unless the user explicitly wants a duplicate order."
|
|
864
|
-
)
|
|
1261
|
+
),
|
|
1262
|
+
fees: zod.z.record(zod.z.unknown()).optional().describe("Protocol fee summary when available (e.g. Circle CCTP Forwarding Service quote used at propose).")
|
|
865
1263
|
}).describe(
|
|
866
|
-
"Submitted mpc-auth multiSignRequest. Continue with
|
|
1264
|
+
"Submitted mpc-auth multiSignRequest. Continue with sign_request_agree \u2192 trigger_sign_result \u2192 broadcast_sign_result. Do not poll wait_for_sign_request_ready \u2014 Join agreement may take days."
|
|
867
1265
|
);
|
|
868
1266
|
var MCP_NON_SUBMIT_TOOL_NAMES = /* @__PURE__ */ new Set([
|
|
869
1267
|
"ctm_uniswap_v4_quote",
|
|
@@ -943,48 +1341,79 @@ var mcpSkySusdsRedeemInputSchema = mcpMultisignInput({
|
|
|
943
1341
|
sharesHuman: zod.z.string().min(1)
|
|
944
1342
|
});
|
|
945
1343
|
var mcpAaveV4MarketIdSchema = zod.z.string().min(1).optional().describe("UI market segment: main (Plus), core, or bluechip (Prime). Default main.");
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
|
|
1344
|
+
function mcpAaveV4MultisignInput(fields, action) {
|
|
1345
|
+
return withMultisignKeySourceRefine(
|
|
1346
|
+
zod.z.preprocess(preprocessAaveMultisignInput(action), evmMultisignCommonInputSchema.extend(fields))
|
|
1347
|
+
);
|
|
1348
|
+
}
|
|
1349
|
+
var mcpAaveV4HealthPreviewFields = {
|
|
1350
|
+
skipHealthPreview: agentOptionalBooleanSchema().describe(
|
|
1351
|
+
"Skip Aave v4 health-factor preview before withdraw/borrow/repay (not recommended)."
|
|
1352
|
+
),
|
|
1353
|
+
acknowledgeHealthRisk: agentOptionalBooleanSchema().describe(
|
|
949
1354
|
"Required true when preview returns a confirm-level health risk (withdraw/borrow/repay)."
|
|
950
1355
|
)
|
|
951
1356
|
};
|
|
952
|
-
var mcpAaveV4DepositInputSchema =
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
var
|
|
970
|
-
|
|
971
|
-
|
|
972
|
-
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
}
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
}
|
|
1357
|
+
var mcpAaveV4DepositInputSchema = mcpAaveV4MultisignInput(
|
|
1358
|
+
{
|
|
1359
|
+
spoke: evmAddressSchema.optional().describe("Omit \u2014 continuum-mcp-server resolves spoke from Aave v4 API."),
|
|
1360
|
+
underlying: evmAddressSchema.describe(
|
|
1361
|
+
"Asset to supply. Native ETH: 0x0 or wrapped native with isNativeIn true."
|
|
1362
|
+
),
|
|
1363
|
+
amountHuman: zod.z.string().min(1),
|
|
1364
|
+
marketId: mcpAaveV4MarketIdSchema,
|
|
1365
|
+
isNativeIn: agentOptionalBooleanSchema().describe(
|
|
1366
|
+
"Wrap native to wrapped native before supply (e.g. ETH \u2192 WETH)."
|
|
1367
|
+
),
|
|
1368
|
+
enableAsCollateralAfterSupply: agentOptionalBooleanSchema().describe(
|
|
1369
|
+
"Append setUsingAsCollateral after supply in the same batch."
|
|
1370
|
+
)
|
|
1371
|
+
},
|
|
1372
|
+
"deposit"
|
|
1373
|
+
);
|
|
1374
|
+
var mcpAaveV4WithdrawInputSchema = mcpAaveV4MultisignInput(
|
|
1375
|
+
{
|
|
1376
|
+
spoke: evmAddressSchema.optional().describe("Omit \u2014 server resolves from Aave v4 API."),
|
|
1377
|
+
underlying: evmAddressSchema.describe("Supplied asset to withdraw."),
|
|
1378
|
+
amountHuman: zod.z.string().min(1),
|
|
1379
|
+
marketId: mcpAaveV4MarketIdSchema,
|
|
1380
|
+
...mcpAaveV4HealthPreviewFields
|
|
1381
|
+
},
|
|
1382
|
+
"withdraw"
|
|
1383
|
+
);
|
|
1384
|
+
var mcpAaveV4BorrowInputSchema = mcpAaveV4MultisignInput(
|
|
1385
|
+
{
|
|
1386
|
+
spoke: evmAddressSchema.optional().describe("Omit \u2014 server resolves from Aave v4 API."),
|
|
1387
|
+
underlying: evmAddressSchema.describe("Debt asset to borrow (e.g. USDC), not collateral."),
|
|
1388
|
+
amountHuman: zod.z.string().min(1),
|
|
1389
|
+
marketId: mcpAaveV4MarketIdSchema,
|
|
1390
|
+
collateralUnderlying: evmAddressSchema.optional().describe("Collateral token already supplied; helps pick hub when debt exists on multiple hubs."),
|
|
1391
|
+
...mcpAaveV4HealthPreviewFields
|
|
1392
|
+
},
|
|
1393
|
+
"borrow"
|
|
1394
|
+
);
|
|
1395
|
+
var mcpAaveV4RepayInputSchema = mcpAaveV4MultisignInput(
|
|
1396
|
+
{
|
|
1397
|
+
spoke: evmAddressSchema.optional().describe("Omit \u2014 server resolves from Aave v4 API."),
|
|
1398
|
+
underlying: evmAddressSchema.describe("Debt token to repay."),
|
|
1399
|
+
amountHuman: zod.z.string().min(1),
|
|
1400
|
+
marketId: mcpAaveV4MarketIdSchema,
|
|
1401
|
+
...mcpAaveV4HealthPreviewFields
|
|
1402
|
+
},
|
|
1403
|
+
"repay"
|
|
1404
|
+
);
|
|
1405
|
+
var mcpEulerV2IsolatedLendInputSchema = withMultisignKeySourceRefine(
|
|
1406
|
+
zod.z.preprocess(
|
|
1407
|
+
preprocessEulerV2IsolatedLendInput,
|
|
1408
|
+
evmMultisignCommonInputSchema.extend({
|
|
1409
|
+
vault: evmAddressSchema.describe("evaultAddress from ctm_euler_v2_fetch_lend_vaults"),
|
|
1410
|
+
assetAmountHuman: zod.z.string().min(1),
|
|
1411
|
+
underlyingAddress: evmAddressSchema.optional().describe("underlyingAddress from fetch row \u2014 server resolves if omitted"),
|
|
1412
|
+
marketName: zod.z.string().optional().describe("marketName from fetch row (purposeText)"),
|
|
1413
|
+
isNativeIn: agentOptionalBooleanSchema()
|
|
1414
|
+
})
|
|
1415
|
+
)
|
|
1416
|
+
);
|
|
988
1417
|
var mcpEulerV2IsolatedBorrowInputSchema = mcpMultisignInput({
|
|
989
1418
|
vault: evmAddressSchema,
|
|
990
1419
|
collateralAsset: evmAddressSchema,
|
|
@@ -1010,32 +1439,68 @@ var mcpEulerV2CollateralWithdrawInputSchema = mcpMultisignInput({
|
|
|
1010
1439
|
collateralAsset: evmAddressSchema,
|
|
1011
1440
|
amountHuman: zod.z.string().min(1)
|
|
1012
1441
|
});
|
|
1013
|
-
var mcpMorphoVaultDepositInputSchema =
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
-
|
|
1017
|
-
|
|
1018
|
-
|
|
1019
|
-
|
|
1020
|
-
|
|
1021
|
-
|
|
1022
|
-
|
|
1023
|
-
|
|
1024
|
-
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
|
|
1028
|
-
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
|
|
1033
|
-
|
|
1034
|
-
|
|
1035
|
-
|
|
1036
|
-
|
|
1037
|
-
|
|
1038
|
-
|
|
1442
|
+
var mcpMorphoVaultDepositInputSchema = withMultisignKeySourceRefine(
|
|
1443
|
+
zod.z.preprocess(
|
|
1444
|
+
preprocessMorphoVaultDepositInput,
|
|
1445
|
+
evmMultisignCommonInputSchema.extend({
|
|
1446
|
+
vaultAddress: evmAddressSchema.describe(
|
|
1447
|
+
"Vault contract address \u2014 copy vaultAddress from ctm_morpho_fetch_earn_vaults row."
|
|
1448
|
+
),
|
|
1449
|
+
underlyingAddress: evmAddressSchema.describe(
|
|
1450
|
+
"Deposit asset address \u2014 copy underlyingAddress from the same fetch row."
|
|
1451
|
+
),
|
|
1452
|
+
amountHuman: zod.z.string().min(1).describe('Human-readable deposit amount (e.g. "1000" USDC).'),
|
|
1453
|
+
vaultName: zod.z.string().optional().describe("Optional vaultName from fetch row (fills purposeText when omitted)."),
|
|
1454
|
+
vaultSymbol: zod.z.string().optional().describe("Optional vaultSymbol from fetch row."),
|
|
1455
|
+
isNativeIn: agentOptionalBooleanSchema()
|
|
1456
|
+
})
|
|
1457
|
+
)
|
|
1458
|
+
);
|
|
1459
|
+
var mcpMorphoVaultWithdrawInputSchema = withMultisignKeySourceRefine(
|
|
1460
|
+
zod.z.preprocess(
|
|
1461
|
+
preprocessMorphoVaultWithdrawInput,
|
|
1462
|
+
evmMultisignCommonInputSchema.extend({
|
|
1463
|
+
vaultAddress: evmAddressSchema.describe(
|
|
1464
|
+
"Vault contract address \u2014 copy vaultAddress from ctm_morpho_fetch_earn_vaults or positions."
|
|
1465
|
+
),
|
|
1466
|
+
amountHuman: zod.z.string().min(1),
|
|
1467
|
+
vaultName: zod.z.string().optional(),
|
|
1468
|
+
vaultSymbol: zod.z.string().optional()
|
|
1469
|
+
})
|
|
1470
|
+
)
|
|
1471
|
+
);
|
|
1472
|
+
var mcpMorphoBlueCollateralDepositInputSchema = withMultisignKeySourceRefine(
|
|
1473
|
+
zod.z.preprocess(
|
|
1474
|
+
preprocessMorphoBlueCollateralDepositInput,
|
|
1475
|
+
evmMultisignCommonInputSchema.extend({
|
|
1476
|
+
marketId: zod.z.string().min(1).describe("marketId from ctm_morpho_fetch_blue_markets"),
|
|
1477
|
+
collateralToken: evmAddressSchema.describe("collateralTokenAddress from fetch row"),
|
|
1478
|
+
amountHuman: zod.z.string().min(1),
|
|
1479
|
+
marketLabel: zod.z.string().optional(),
|
|
1480
|
+
isNativeIn: agentOptionalBooleanSchema()
|
|
1481
|
+
})
|
|
1482
|
+
)
|
|
1483
|
+
);
|
|
1484
|
+
var mcpMorphoBlueBorrowInputSchema = withMultisignKeySourceRefine(
|
|
1485
|
+
zod.z.preprocess(
|
|
1486
|
+
preprocessMorphoBlueBorrowRepayInput,
|
|
1487
|
+
evmMultisignCommonInputSchema.extend({
|
|
1488
|
+
marketId: zod.z.string().min(1),
|
|
1489
|
+
loanToken: evmAddressSchema.describe("loanTokenAddress from ctm_morpho_fetch_blue_markets"),
|
|
1490
|
+
amountHuman: zod.z.string().min(1)
|
|
1491
|
+
})
|
|
1492
|
+
)
|
|
1493
|
+
);
|
|
1494
|
+
var mcpMorphoBlueRepayInputSchema = withMultisignKeySourceRefine(
|
|
1495
|
+
zod.z.preprocess(
|
|
1496
|
+
preprocessMorphoBlueBorrowRepayInput,
|
|
1497
|
+
evmMultisignCommonInputSchema.extend({
|
|
1498
|
+
marketId: zod.z.string().min(1),
|
|
1499
|
+
loanToken: evmAddressSchema.describe("loanTokenAddress from fetch row"),
|
|
1500
|
+
amountHuman: zod.z.string().min(1)
|
|
1501
|
+
})
|
|
1502
|
+
)
|
|
1503
|
+
);
|
|
1039
1504
|
var mcpMorphoBlueCollateralWithdrawInputSchema = mcpMultisignInput({
|
|
1040
1505
|
marketId: zod.z.string().min(1),
|
|
1041
1506
|
amountHuman: zod.z.string().min(1),
|
|
@@ -1046,46 +1511,39 @@ var mcpMorphoMerklClaimInputSchema = mcpMultisignInput({
|
|
|
1046
1511
|
distributor: evmAddressSchema.optional(),
|
|
1047
1512
|
valueWei: zod.z.string().optional()
|
|
1048
1513
|
});
|
|
1049
|
-
var
|
|
1050
|
-
|
|
1051
|
-
|
|
1052
|
-
|
|
1053
|
-
|
|
1054
|
-
|
|
1055
|
-
chainId: zod.z.number().int().positive(),
|
|
1056
|
-
underlying: zod.z.string().trim().min(1).optional().describe("Deposit asset symbol (e.g. USDC) or ERC-20 address. Omit to search all listed vaults on the chain."),
|
|
1057
|
-
query: zod.z.string().trim().min(1).optional().describe("Case-insensitive filter on vault name, symbol, address, or underlying symbol (e.g. Steakhouse, bbqUSDC)."),
|
|
1058
|
-
limit: zod.z.number().int().min(1).max(200).optional().describe("Max rows (default 50).")
|
|
1514
|
+
var mcpEulerV2FetchLendVaultsInputSchema = zod.z.object({
|
|
1515
|
+
chainId: agentEvmChainIdSchema,
|
|
1516
|
+
underlyingAddress: evmAddressSchema.describe(
|
|
1517
|
+
"Underlying asset address from get_defi_protocol_supported_tokens."
|
|
1518
|
+
),
|
|
1519
|
+
limit: zod.z.number().int().min(1).max(100).optional().describe("Max vault rows (default 30).")
|
|
1059
1520
|
});
|
|
1060
|
-
var
|
|
1521
|
+
var mcpEulerV2FetchLendVaultsOutputSchema = zod.z.object({
|
|
1061
1522
|
vaults: zod.z.array(
|
|
1062
1523
|
zod.z.object({
|
|
1063
|
-
|
|
1064
|
-
|
|
1065
|
-
vaultSymbol: zod.z.string(),
|
|
1524
|
+
evaultAddress: zod.z.string().describe("Copy as vault / evaultAddress for isolated lend multisign"),
|
|
1525
|
+
marketName: zod.z.string(),
|
|
1066
1526
|
underlyingAddress: zod.z.string(),
|
|
1067
|
-
|
|
1068
|
-
|
|
1069
|
-
|
|
1070
|
-
|
|
1071
|
-
|
|
1072
|
-
|
|
1073
|
-
performanceFee: zod.z.string(),
|
|
1074
|
-
managementFee: zod.z.string().nullable(),
|
|
1075
|
-
totalDepositsUsd: zod.z.string(),
|
|
1076
|
-
liquidityUsd: zod.z.string(),
|
|
1077
|
-
exposure: zod.z.array(morphoExposureRowSchema)
|
|
1527
|
+
underlyingDecimals: zod.z.number().int(),
|
|
1528
|
+
supplyApyPercentLabel: zod.z.string(),
|
|
1529
|
+
borrowApyPercentLabel: zod.z.string(),
|
|
1530
|
+
availableLiquidityFormatted: zod.z.string(),
|
|
1531
|
+
totalSupplyFormatted: zod.z.string(),
|
|
1532
|
+
evcAddress: zod.z.string().nullable()
|
|
1078
1533
|
})
|
|
1079
1534
|
)
|
|
1080
1535
|
});
|
|
1081
|
-
function mcpGmxMultisignInput(fields) {
|
|
1082
|
-
|
|
1536
|
+
function mcpGmxMultisignInput(fields, preprocess) {
|
|
1537
|
+
const inner = evmMultisignCommonInputSchema.extend(fields);
|
|
1538
|
+
const shaped = preprocess ? zod.z.preprocess(preprocess, inner) : inner;
|
|
1539
|
+
return withMultisignKeySourceRefine(shaped);
|
|
1083
1540
|
}
|
|
1084
1541
|
var gmxDirectionSchema = zod.z.enum(["long", "short"]);
|
|
1085
1542
|
var gmxOrderTypeSchema = zod.z.enum(["market", "limit"]);
|
|
1086
|
-
var
|
|
1087
|
-
chainId:
|
|
1543
|
+
var gmxFetchChainInputSchema = zod.z.object({
|
|
1544
|
+
chainId: agentEvmChainIdSchema
|
|
1088
1545
|
});
|
|
1546
|
+
var mcpGmxFetchMarketsInputSchema = gmxFetchChainInputSchema;
|
|
1089
1547
|
var mcpGmxFetchMarketsOutputSchema = zod.z.object({
|
|
1090
1548
|
markets: zod.z.array(
|
|
1091
1549
|
zod.z.object({
|
|
@@ -1096,53 +1554,95 @@ var mcpGmxFetchMarketsOutputSchema = zod.z.object({
|
|
|
1096
1554
|
)
|
|
1097
1555
|
});
|
|
1098
1556
|
var mcpGmxFetchPositionsInputSchema = zod.z.object({
|
|
1099
|
-
chainId:
|
|
1557
|
+
chainId: agentEvmChainIdSchema,
|
|
1100
1558
|
executorAddress: evmAddressSchema
|
|
1101
1559
|
});
|
|
1102
1560
|
var mcpGmxFetchPositionsOutputSchema = zod.z.object({
|
|
1103
|
-
positions: zod.z.array(
|
|
1561
|
+
positions: zod.z.array(
|
|
1562
|
+
zod.z.object({
|
|
1563
|
+
key: zod.z.string(),
|
|
1564
|
+
symbol: zod.z.string().nullable().describe("GMX market symbol \u2014 pass to build_decrease as symbol"),
|
|
1565
|
+
indexName: zod.z.string(),
|
|
1566
|
+
isLong: zod.z.boolean(),
|
|
1567
|
+
direction: zod.z.enum(["long", "short"]).describe("Derived from isLong \u2014 pass to build_decrease"),
|
|
1568
|
+
sizeUsd: zod.z.string().nullable().describe("Copy as sizeUsdHuman for partial close"),
|
|
1569
|
+
collateralUsd: zod.z.string().nullable(),
|
|
1570
|
+
collateralSymbol: zod.z.string().nullable().describe("Copy as collateralToken"),
|
|
1571
|
+
entryPriceUsd: zod.z.string().nullable(),
|
|
1572
|
+
markPriceUsd: zod.z.string().nullable(),
|
|
1573
|
+
liquidationPriceUsd: zod.z.string().nullable(),
|
|
1574
|
+
leverageLabel: zod.z.string().nullable(),
|
|
1575
|
+
pnlUsd: zod.z.string().nullable()
|
|
1576
|
+
})
|
|
1577
|
+
)
|
|
1104
1578
|
});
|
|
1105
|
-
var
|
|
1106
|
-
|
|
1107
|
-
|
|
1108
|
-
orderType: gmxOrderTypeSchema,
|
|
1109
|
-
sizeUsdHuman: zod.z.string().min(1),
|
|
1110
|
-
collateralToken: zod.z.string().min(1),
|
|
1111
|
-
collateralAmountHuman: zod.z.string().min(1),
|
|
1112
|
-
triggerPriceUsdHuman: zod.z.string().optional(),
|
|
1113
|
-
slippageBps: zod.z.number().int().nonnegative().optional(),
|
|
1114
|
-
executionFeeBufferBps: zod.z.number().int().nonnegative().optional()
|
|
1579
|
+
var mcpGmxFetchOrdersInputSchema = zod.z.object({
|
|
1580
|
+
chainId: agentEvmChainIdSchema,
|
|
1581
|
+
executorAddress: evmAddressSchema
|
|
1115
1582
|
});
|
|
1116
|
-
var
|
|
1117
|
-
|
|
1118
|
-
|
|
1119
|
-
|
|
1120
|
-
|
|
1121
|
-
|
|
1122
|
-
|
|
1123
|
-
|
|
1124
|
-
|
|
1125
|
-
slippageBps: zod.z.number().int().nonnegative().optional(),
|
|
1126
|
-
executionFeeBufferBps: zod.z.number().int().nonnegative().optional()
|
|
1583
|
+
var mcpGmxFetchOrdersOutputSchema = zod.z.object({
|
|
1584
|
+
orders: zod.z.array(
|
|
1585
|
+
zod.z.object({
|
|
1586
|
+
orderId: zod.z.string().describe("Order key \u2014 pass to build_cancel_multisign as orderId"),
|
|
1587
|
+
isLong: zod.z.boolean().optional(),
|
|
1588
|
+
sizeDeltaUsd: zod.z.string().nullable().optional(),
|
|
1589
|
+
triggerPrice: zod.z.string().nullable().optional()
|
|
1590
|
+
})
|
|
1591
|
+
)
|
|
1127
1592
|
});
|
|
1593
|
+
var mcpGmxIncreaseInputSchema = mcpGmxMultisignInput(
|
|
1594
|
+
{
|
|
1595
|
+
symbol: zod.z.string().min(1).describe("Market symbol from ctm_gmx_fetch_markets"),
|
|
1596
|
+
direction: gmxDirectionSchema,
|
|
1597
|
+
orderType: gmxOrderTypeSchema,
|
|
1598
|
+
sizeUsdHuman: zod.z.string().min(1),
|
|
1599
|
+
collateralToken: zod.z.string().min(1),
|
|
1600
|
+
collateralAmountHuman: zod.z.string().min(1),
|
|
1601
|
+
triggerPriceUsdHuman: zod.z.string().optional(),
|
|
1602
|
+
slippageBps: zod.z.number().int().nonnegative().optional(),
|
|
1603
|
+
executionFeeBufferBps: zod.z.number().int().nonnegative().optional()
|
|
1604
|
+
},
|
|
1605
|
+
preprocessGmxIncreaseInput
|
|
1606
|
+
);
|
|
1607
|
+
var mcpGmxDecreaseInputSchema = mcpGmxMultisignInput(
|
|
1608
|
+
{
|
|
1609
|
+
symbol: zod.z.string().min(1).describe("symbol from ctm_gmx_fetch_positions or fetch_markets"),
|
|
1610
|
+
direction: gmxDirectionSchema.describe("direction from position row or isLong"),
|
|
1611
|
+
orderType: gmxOrderTypeSchema,
|
|
1612
|
+
sizeUsdHuman: zod.z.string().min(1).describe("sizeUsd from position row"),
|
|
1613
|
+
collateralToken: zod.z.string().min(1).describe("collateralSymbol from position row"),
|
|
1614
|
+
receiveToken: zod.z.string().optional(),
|
|
1615
|
+
triggerPriceUsdHuman: zod.z.string().optional(),
|
|
1616
|
+
keepLeverage: agentOptionalBooleanSchema(),
|
|
1617
|
+
slippageBps: zod.z.number().int().nonnegative().optional(),
|
|
1618
|
+
executionFeeBufferBps: zod.z.number().int().nonnegative().optional()
|
|
1619
|
+
},
|
|
1620
|
+
preprocessGmxDecreaseInput
|
|
1621
|
+
);
|
|
1128
1622
|
var mcpGmxCancelInputSchema = mcpGmxMultisignInput({
|
|
1129
|
-
orderId: zod.z.string().min(1)
|
|
1130
|
-
});
|
|
1131
|
-
var mcpGmxGmDepositInputSchema = mcpGmxMultisignInput({
|
|
1132
|
-
marketSymbol: zod.z.string().min(1),
|
|
1133
|
-
collateralToken: zod.z.string().min(1),
|
|
1134
|
-
collateralAmountHuman: zod.z.string().min(1),
|
|
1135
|
-
executionFeeBufferBps: zod.z.number().int().nonnegative().optional(),
|
|
1136
|
-
isNativeIn: zod.z.boolean().optional(),
|
|
1137
|
-
nativeWrapped: evmAddressSchema.optional()
|
|
1138
|
-
});
|
|
1139
|
-
var mcpGmxGmWithdrawInputSchema = mcpGmxMultisignInput({
|
|
1140
|
-
marketSymbol: zod.z.string().min(1),
|
|
1141
|
-
gmAmountHuman: zod.z.string().min(1),
|
|
1142
|
-
gmDecimals: zod.z.number().int().nonnegative().optional(),
|
|
1143
|
-
executionFeeBufferBps: zod.z.number().int().nonnegative().optional(),
|
|
1144
|
-
isNativeOut: zod.z.boolean().optional()
|
|
1623
|
+
orderId: zod.z.string().min(1).describe("orderId from ctm_gmx_fetch_orders")
|
|
1145
1624
|
});
|
|
1625
|
+
var mcpGmxGmDepositInputSchema = mcpGmxMultisignInput(
|
|
1626
|
+
{
|
|
1627
|
+
marketSymbol: zod.z.string().min(1).describe("symbol from ctm_gmx_fetch_gm_markets"),
|
|
1628
|
+
collateralToken: zod.z.string().min(1).describe("longTokenSymbol or shortTokenSymbol from GM market row"),
|
|
1629
|
+
collateralAmountHuman: zod.z.string().min(1),
|
|
1630
|
+
executionFeeBufferBps: zod.z.number().int().nonnegative().optional(),
|
|
1631
|
+
isNativeIn: agentOptionalBooleanSchema(),
|
|
1632
|
+
nativeWrapped: evmAddressSchema.optional()
|
|
1633
|
+
},
|
|
1634
|
+
preprocessGmxGmBuildInput
|
|
1635
|
+
);
|
|
1636
|
+
var mcpGmxGmWithdrawInputSchema = mcpGmxMultisignInput(
|
|
1637
|
+
{
|
|
1638
|
+
marketSymbol: zod.z.string().min(1).describe("symbol from ctm_gmx_fetch_gm_markets"),
|
|
1639
|
+
gmAmountHuman: zod.z.string().min(1),
|
|
1640
|
+
gmDecimals: zod.z.number().int().nonnegative().optional(),
|
|
1641
|
+
executionFeeBufferBps: zod.z.number().int().nonnegative().optional(),
|
|
1642
|
+
isNativeOut: agentOptionalBooleanSchema()
|
|
1643
|
+
},
|
|
1644
|
+
preprocessGmxGmBuildInput
|
|
1645
|
+
);
|
|
1146
1646
|
var mcpGmxStakeGmxInputSchema = mcpGmxMultisignInput({
|
|
1147
1647
|
amountHuman: zod.z.string().min(1),
|
|
1148
1648
|
gmxDecimals: zod.z.number().int().nonnegative().optional()
|
|
@@ -1151,9 +1651,7 @@ var mcpGmxUnstakeGmxInputSchema = mcpGmxMultisignInput({
|
|
|
1151
1651
|
amountHuman: zod.z.string().min(1),
|
|
1152
1652
|
gmxDecimals: zod.z.number().int().nonnegative().optional()
|
|
1153
1653
|
});
|
|
1154
|
-
var mcpGmxFetchGmMarketsInputSchema =
|
|
1155
|
-
chainId: zod.z.number().int().positive()
|
|
1156
|
-
});
|
|
1654
|
+
var mcpGmxFetchGmMarketsInputSchema = gmxFetchChainInputSchema;
|
|
1157
1655
|
var mcpGmxGmMarketApyRowSchema = zod.z.object({
|
|
1158
1656
|
symbol: zod.z.string(),
|
|
1159
1657
|
marketTokenAddress: zod.z.string(),
|
|
@@ -1167,9 +1665,7 @@ var mcpGmxGmMarketApyRowSchema = zod.z.object({
|
|
|
1167
1665
|
var mcpGmxFetchGmMarketsOutputSchema = zod.z.object({
|
|
1168
1666
|
markets: zod.z.array(mcpGmxGmMarketApyRowSchema)
|
|
1169
1667
|
});
|
|
1170
|
-
var mcpGmxFetchGmApyInputSchema =
|
|
1171
|
-
chainId: zod.z.number().int().positive()
|
|
1172
|
-
});
|
|
1668
|
+
var mcpGmxFetchGmApyInputSchema = gmxFetchChainInputSchema;
|
|
1173
1669
|
var mcpGmxFetchGmApyOutputSchema = zod.z.object({
|
|
1174
1670
|
markets: zod.z.array(
|
|
1175
1671
|
zod.z.object({
|
|
@@ -1185,7 +1681,7 @@ var mcpGmxFetchGmApyOutputSchema = zod.z.object({
|
|
|
1185
1681
|
)
|
|
1186
1682
|
});
|
|
1187
1683
|
var mcpGmxFetchStakingPowerInputSchema = zod.z.object({
|
|
1188
|
-
chainId:
|
|
1684
|
+
chainId: agentEvmChainIdSchema,
|
|
1189
1685
|
executorAddress: evmAddressSchema
|
|
1190
1686
|
});
|
|
1191
1687
|
var mcpGmxFetchStakingPowerOutputSchema = zod.z.object({
|
|
@@ -1201,7 +1697,7 @@ var gmxOhlcvCandleSchema = zod.z.object({
|
|
|
1201
1697
|
close: zod.z.string()
|
|
1202
1698
|
});
|
|
1203
1699
|
var mcpGmxFetchMarketPricesInputSchema = zod.z.object({
|
|
1204
|
-
chainId:
|
|
1700
|
+
chainId: agentEvmChainIdSchema,
|
|
1205
1701
|
symbol: zod.z.string().min(1),
|
|
1206
1702
|
collateralSymbol: zod.z.string().min(1)
|
|
1207
1703
|
});
|
|
@@ -1215,7 +1711,7 @@ var mcpGmxFetchMarketPricesOutputSchema = zod.z.object({
|
|
|
1215
1711
|
fetchedAtMs: zod.z.number()
|
|
1216
1712
|
});
|
|
1217
1713
|
var mcpGmxFetchOhlcvInputSchema = zod.z.object({
|
|
1218
|
-
chainId:
|
|
1714
|
+
chainId: agentEvmChainIdSchema,
|
|
1219
1715
|
symbol: zod.z.string().min(1),
|
|
1220
1716
|
timeframe: gmxOhlcvTimeframeSchema.optional(),
|
|
1221
1717
|
limit: zod.z.number().int().positive().max(500).optional(),
|
|
@@ -1226,8 +1722,10 @@ var mcpGmxFetchOhlcvOutputSchema = zod.z.object({
|
|
|
1226
1722
|
timeframe: gmxOhlcvTimeframeSchema,
|
|
1227
1723
|
candles: zod.z.array(gmxOhlcvCandleSchema)
|
|
1228
1724
|
});
|
|
1229
|
-
function mcpHyperliquidMultisignInput(fields) {
|
|
1230
|
-
|
|
1725
|
+
function mcpHyperliquidMultisignInput(fields, preprocess) {
|
|
1726
|
+
const inner = evmMultisignCommonInputSchema.extend(fields);
|
|
1727
|
+
const shaped = preprocess ? zod.z.preprocess(preprocess, inner) : inner;
|
|
1728
|
+
return withMultisignKeySourceRefine(shaped);
|
|
1231
1729
|
}
|
|
1232
1730
|
var hyperliquidTifSchema = zod.z.enum(["alo", "gtc", "ioc"]);
|
|
1233
1731
|
var hyperliquidOhlcvIntervalSchema = zod.z.enum([
|
|
@@ -1246,11 +1744,14 @@ var hyperliquidOhlcvIntervalSchema = zod.z.enum([
|
|
|
1246
1744
|
"1w",
|
|
1247
1745
|
"1M"
|
|
1248
1746
|
]);
|
|
1747
|
+
var hyperliquidFetchChainInputSchema = zod.z.object({
|
|
1748
|
+
chainId: agentEvmChainIdSchema
|
|
1749
|
+
});
|
|
1249
1750
|
var hyperliquidPositionRowSchema = zod.z.object({
|
|
1250
1751
|
key: zod.z.string(),
|
|
1251
1752
|
coin: zod.z.string(),
|
|
1252
1753
|
isLong: zod.z.boolean(),
|
|
1253
|
-
size: zod.z.string().nullable(),
|
|
1754
|
+
size: zod.z.string().nullable().describe("Copy as szHuman for build_close_multisign"),
|
|
1254
1755
|
entryPx: zod.z.string().nullable(),
|
|
1255
1756
|
positionValueUsd: zod.z.string().nullable(),
|
|
1256
1757
|
unrealizedPnlUsd: zod.z.string().nullable(),
|
|
@@ -1271,14 +1772,13 @@ var hyperliquidAccountSummarySchema = zod.z.object({
|
|
|
1271
1772
|
totalMarginUsedUsd: zod.z.string().nullable(),
|
|
1272
1773
|
withdrawableUsd: zod.z.string().nullable()
|
|
1273
1774
|
});
|
|
1274
|
-
var mcpHyperliquidFetchMarketsInputSchema =
|
|
1275
|
-
chainId: zod.z.number().int().positive(),
|
|
1775
|
+
var mcpHyperliquidFetchMarketsInputSchema = hyperliquidFetchChainInputSchema.extend({
|
|
1276
1776
|
dex: zod.z.string().optional()
|
|
1277
1777
|
});
|
|
1278
1778
|
var mcpHyperliquidFetchMarketsOutputSchema = zod.z.object({
|
|
1279
1779
|
markets: zod.z.array(
|
|
1280
1780
|
zod.z.object({
|
|
1281
|
-
name: zod.z.string(),
|
|
1781
|
+
name: zod.z.string().describe("Perp coin name \u2014 alias for build limit order coin"),
|
|
1282
1782
|
asset: zod.z.number(),
|
|
1283
1783
|
szDecimals: zod.z.number(),
|
|
1284
1784
|
maxLeverage: zod.z.number(),
|
|
@@ -1293,8 +1793,7 @@ var mcpHyperliquidFetchMarketsOutputSchema = zod.z.object({
|
|
|
1293
1793
|
})
|
|
1294
1794
|
)
|
|
1295
1795
|
});
|
|
1296
|
-
var mcpHyperliquidSearchMarketsInputSchema =
|
|
1297
|
-
chainId: zod.z.number().int().positive(),
|
|
1796
|
+
var mcpHyperliquidSearchMarketsInputSchema = hyperliquidFetchChainInputSchema.extend({
|
|
1298
1797
|
query: zod.z.string().min(1),
|
|
1299
1798
|
dex: zod.z.string().optional(),
|
|
1300
1799
|
limit: zod.z.number().int().positive().max(50).optional()
|
|
@@ -1317,8 +1816,7 @@ var mcpHyperliquidSearchMarketsOutputSchema = zod.z.object({
|
|
|
1317
1816
|
})
|
|
1318
1817
|
)
|
|
1319
1818
|
});
|
|
1320
|
-
var mcpHyperliquidFetchOpenContextInputSchema =
|
|
1321
|
-
chainId: zod.z.number().int().positive(),
|
|
1819
|
+
var mcpHyperliquidFetchOpenContextInputSchema = hyperliquidFetchChainInputSchema.extend({
|
|
1322
1820
|
executorAddress: evmAddressSchema,
|
|
1323
1821
|
coin: zod.z.string().min(1),
|
|
1324
1822
|
dex: zod.z.string().optional()
|
|
@@ -1329,16 +1827,14 @@ var mcpHyperliquidFetchOpenContextOutputSchema = zod.z.object({
|
|
|
1329
1827
|
activeAsset: hyperliquidActiveAssetSchema
|
|
1330
1828
|
})
|
|
1331
1829
|
});
|
|
1332
|
-
var mcpHyperliquidFetchPositionsInputSchema =
|
|
1333
|
-
chainId: zod.z.number().int().positive(),
|
|
1830
|
+
var mcpHyperliquidFetchPositionsInputSchema = hyperliquidFetchChainInputSchema.extend({
|
|
1334
1831
|
executorAddress: evmAddressSchema,
|
|
1335
1832
|
dex: zod.z.string().optional()
|
|
1336
1833
|
});
|
|
1337
1834
|
var mcpHyperliquidFetchPositionsOutputSchema = zod.z.object({
|
|
1338
1835
|
positions: zod.z.array(hyperliquidPositionRowSchema)
|
|
1339
1836
|
});
|
|
1340
|
-
var mcpHyperliquidFetchOpenOrdersInputSchema =
|
|
1341
|
-
chainId: zod.z.number().int().positive(),
|
|
1837
|
+
var mcpHyperliquidFetchOpenOrdersInputSchema = hyperliquidFetchChainInputSchema.extend({
|
|
1342
1838
|
executorAddress: evmAddressSchema,
|
|
1343
1839
|
dex: zod.z.string().optional()
|
|
1344
1840
|
});
|
|
@@ -1349,18 +1845,16 @@ var mcpHyperliquidFetchOpenOrdersOutputSchema = zod.z.object({
|
|
|
1349
1845
|
side: zod.z.string(),
|
|
1350
1846
|
limitPx: zod.z.string(),
|
|
1351
1847
|
sz: zod.z.string(),
|
|
1352
|
-
oid: zod.z.number(),
|
|
1848
|
+
oid: zod.z.number().describe("Pass to build_cancel_multisign as oid"),
|
|
1353
1849
|
timestamp: zod.z.number(),
|
|
1354
1850
|
reduceOnly: zod.z.boolean().optional()
|
|
1355
1851
|
})
|
|
1356
1852
|
)
|
|
1357
1853
|
});
|
|
1358
|
-
var mcpHyperliquidFetchMarketSnapshotInputSchema =
|
|
1359
|
-
chainId: zod.z.number().int().positive(),
|
|
1854
|
+
var mcpHyperliquidFetchMarketSnapshotInputSchema = hyperliquidFetchChainInputSchema.extend({
|
|
1360
1855
|
coin: zod.z.string().min(1),
|
|
1361
1856
|
interval: hyperliquidOhlcvIntervalSchema.optional(),
|
|
1362
1857
|
dex: zod.z.string().optional(),
|
|
1363
|
-
/** Recent OHLCV bars to return (default 48, max 200). Live price is always current. */
|
|
1364
1858
|
candleLimit: zod.z.number().int().positive().max(200).optional()
|
|
1365
1859
|
});
|
|
1366
1860
|
var hyperliquidOhlcvCandleSchema = zod.z.object({
|
|
@@ -1391,21 +1885,16 @@ var mcpHyperliquidFetchMarketSnapshotOutputSchema = zod.z.object({
|
|
|
1391
1885
|
candles: zod.z.array(hyperliquidOhlcvCandleSchema),
|
|
1392
1886
|
candleCount: zod.z.number()
|
|
1393
1887
|
}),
|
|
1394
|
-
resolvedCoin: zod.z.string(),
|
|
1888
|
+
resolvedCoin: zod.z.string().describe("Canonical coin \u2014 alias for build coin"),
|
|
1395
1889
|
dex: zod.z.string().nullable()
|
|
1396
1890
|
});
|
|
1397
|
-
var mcpHyperliquidFetchOhlcvInputSchema =
|
|
1398
|
-
chainId: zod.z.number().int().positive(),
|
|
1891
|
+
var mcpHyperliquidFetchOhlcvInputSchema = hyperliquidFetchChainInputSchema.extend({
|
|
1399
1892
|
coin: zod.z.string().min(1),
|
|
1400
1893
|
interval: hyperliquidOhlcvIntervalSchema.optional(),
|
|
1401
1894
|
dex: zod.z.string().optional(),
|
|
1402
|
-
/** Calendar-day lookback ending now (e.g. 7 = last week). Preferred for agent requests. */
|
|
1403
1895
|
lookbackDays: zod.z.number().positive().max(90).optional(),
|
|
1404
|
-
/** Hour lookback ending now. Alternative to lookbackDays. */
|
|
1405
1896
|
lookbackHours: zod.z.number().positive().max(90 * 24).optional(),
|
|
1406
|
-
/** Explicit range start (ms since epoch). Use with endTimeMs. */
|
|
1407
1897
|
startTimeMs: zod.z.number().int().positive().optional(),
|
|
1408
|
-
/** Explicit range end (ms since epoch). Defaults to now. */
|
|
1409
1898
|
endTimeMs: zod.z.number().int().positive().optional()
|
|
1410
1899
|
});
|
|
1411
1900
|
var mcpHyperliquidFetchOhlcvOutputSchema = zod.z.object({
|
|
@@ -1424,8 +1913,7 @@ var mcpHyperliquidFetchOhlcvOutputSchema = zod.z.object({
|
|
|
1424
1913
|
resolvedCoin: zod.z.string(),
|
|
1425
1914
|
dex: zod.z.string().nullable()
|
|
1426
1915
|
});
|
|
1427
|
-
var mcpHyperliquidFetchUsdClassBalancesInputSchema =
|
|
1428
|
-
chainId: zod.z.number().int().positive(),
|
|
1916
|
+
var mcpHyperliquidFetchUsdClassBalancesInputSchema = hyperliquidFetchChainInputSchema.extend({
|
|
1429
1917
|
executorAddress: evmAddressSchema
|
|
1430
1918
|
});
|
|
1431
1919
|
var mcpHyperliquidFetchUsdClassBalancesOutputSchema = zod.z.object({
|
|
@@ -1434,34 +1922,31 @@ var mcpHyperliquidFetchUsdClassBalancesOutputSchema = zod.z.object({
|
|
|
1434
1922
|
perpWithdrawable: zod.z.string()
|
|
1435
1923
|
})
|
|
1436
1924
|
});
|
|
1437
|
-
var mcpHyperliquidFetchVaultsInputSchema =
|
|
1438
|
-
chainId: zod.z.number().int().positive(),
|
|
1925
|
+
var mcpHyperliquidFetchVaultsInputSchema = hyperliquidFetchChainInputSchema.extend({
|
|
1439
1926
|
executorAddress: evmAddressSchema.optional()
|
|
1440
1927
|
});
|
|
1441
1928
|
var mcpHyperliquidFetchVaultsOutputSchema = zod.z.object({
|
|
1442
1929
|
vaults: zod.z.array(
|
|
1443
1930
|
zod.z.object({
|
|
1444
1931
|
vaultAddress: zod.z.string(),
|
|
1445
|
-
name: zod.z.string(),
|
|
1932
|
+
name: zod.z.string().describe("Optional vaultName for purposeText on deposit"),
|
|
1446
1933
|
apr: zod.z.number().nullable(),
|
|
1447
1934
|
tvlUsd: zod.z.string().nullable()
|
|
1448
1935
|
})
|
|
1449
1936
|
)
|
|
1450
1937
|
});
|
|
1451
|
-
var mcpHyperliquidFetchUserVaultEquitiesInputSchema =
|
|
1452
|
-
chainId: zod.z.number().int().positive(),
|
|
1938
|
+
var mcpHyperliquidFetchUserVaultEquitiesInputSchema = hyperliquidFetchChainInputSchema.extend({
|
|
1453
1939
|
executorAddress: evmAddressSchema
|
|
1454
1940
|
});
|
|
1455
1941
|
var mcpHyperliquidFetchUserVaultEquitiesOutputSchema = zod.z.object({
|
|
1456
1942
|
rows: zod.z.array(
|
|
1457
1943
|
zod.z.object({
|
|
1458
1944
|
vaultAddress: zod.z.string(),
|
|
1459
|
-
equity: zod.z.string()
|
|
1945
|
+
equity: zod.z.string().describe("Copy as usdHuman for build_vault_withdraw_multisign")
|
|
1460
1946
|
})
|
|
1461
1947
|
)
|
|
1462
1948
|
});
|
|
1463
|
-
var mcpHyperliquidFetchStakingSummaryInputSchema =
|
|
1464
|
-
chainId: zod.z.number().int().positive(),
|
|
1949
|
+
var mcpHyperliquidFetchStakingSummaryInputSchema = hyperliquidFetchChainInputSchema.extend({
|
|
1465
1950
|
executorAddress: evmAddressSchema
|
|
1466
1951
|
});
|
|
1467
1952
|
var mcpHyperliquidFetchStakingSummaryOutputSchema = zod.z.object({
|
|
@@ -1470,53 +1955,68 @@ var mcpHyperliquidFetchStakingSummaryOutputSchema = zod.z.object({
|
|
|
1470
1955
|
undelegated: zod.z.string()
|
|
1471
1956
|
})
|
|
1472
1957
|
});
|
|
1473
|
-
var mcpHyperliquidFetchDelegationsInputSchema =
|
|
1474
|
-
chainId: zod.z.number().int().positive(),
|
|
1958
|
+
var mcpHyperliquidFetchDelegationsInputSchema = hyperliquidFetchChainInputSchema.extend({
|
|
1475
1959
|
executorAddress: evmAddressSchema
|
|
1476
1960
|
});
|
|
1477
1961
|
var mcpHyperliquidFetchDelegationsOutputSchema = zod.z.object({
|
|
1478
1962
|
delegations: zod.z.array(
|
|
1479
1963
|
zod.z.object({
|
|
1480
1964
|
validator: zod.z.string(),
|
|
1481
|
-
amount: zod.z.string()
|
|
1965
|
+
amount: zod.z.string().describe("Copy as hypeHuman for build_undelegate_multisign")
|
|
1482
1966
|
})
|
|
1483
1967
|
)
|
|
1484
1968
|
});
|
|
1485
|
-
var mcpHyperliquidLimitOrderInputSchema = mcpHyperliquidMultisignInput(
|
|
1486
|
-
|
|
1487
|
-
|
|
1488
|
-
|
|
1489
|
-
|
|
1490
|
-
|
|
1491
|
-
|
|
1492
|
-
|
|
1493
|
-
|
|
1494
|
-
|
|
1495
|
-
|
|
1496
|
-
|
|
1497
|
-
|
|
1498
|
-
|
|
1499
|
-
|
|
1500
|
-
|
|
1501
|
-
|
|
1502
|
-
|
|
1503
|
-
|
|
1504
|
-
|
|
1505
|
-
|
|
1506
|
-
|
|
1507
|
-
|
|
1969
|
+
var mcpHyperliquidLimitOrderInputSchema = mcpHyperliquidMultisignInput(
|
|
1970
|
+
{
|
|
1971
|
+
coin: zod.z.string().min(1).describe("coin from fetch_markets (name) or search_markets"),
|
|
1972
|
+
isBuy: agentBooleanSchema(),
|
|
1973
|
+
limitPxHuman: zod.z.string().min(1).describe("limitPx or markPx from open_context"),
|
|
1974
|
+
szHuman: zod.z.string().min(1),
|
|
1975
|
+
marketKind: zod.z.enum(["perp", "spot"]).optional(),
|
|
1976
|
+
tif: hyperliquidTifSchema.optional(),
|
|
1977
|
+
dex: zod.z.string().optional()
|
|
1978
|
+
},
|
|
1979
|
+
preprocessHyperliquidLimitOrderInput
|
|
1980
|
+
);
|
|
1981
|
+
var mcpHyperliquidCloseInputSchema = mcpHyperliquidMultisignInput(
|
|
1982
|
+
{
|
|
1983
|
+
coin: zod.z.string().min(1),
|
|
1984
|
+
isLong: agentBooleanSchema(),
|
|
1985
|
+
limitPxHuman: zod.z.string().min(1),
|
|
1986
|
+
szHuman: zod.z.string().min(1).describe("size from fetch_positions"),
|
|
1987
|
+
dex: zod.z.string().optional(),
|
|
1988
|
+
tif: hyperliquidTifSchema.optional()
|
|
1989
|
+
},
|
|
1990
|
+
preprocessHyperliquidCloseInput
|
|
1991
|
+
);
|
|
1992
|
+
var mcpHyperliquidCancelInputSchema = mcpHyperliquidMultisignInput(
|
|
1993
|
+
{
|
|
1994
|
+
coin: zod.z.string().min(1),
|
|
1995
|
+
oid: zod.z.number().int().positive().describe("oid from fetch_open_orders"),
|
|
1996
|
+
marketKind: zod.z.enum(["perp", "spot"]).optional(),
|
|
1997
|
+
dex: zod.z.string().optional()
|
|
1998
|
+
},
|
|
1999
|
+
preprocessHyperliquidCoinInput
|
|
2000
|
+
);
|
|
1508
2001
|
var mcpHyperliquidUsdTransferInputSchema = mcpHyperliquidMultisignInput({
|
|
1509
2002
|
usdHuman: zod.z.string().min(1),
|
|
1510
|
-
toPerp:
|
|
1511
|
-
});
|
|
1512
|
-
var mcpHyperliquidVaultDepositInputSchema = mcpHyperliquidMultisignInput({
|
|
1513
|
-
vaultAddress: evmAddressSchema,
|
|
1514
|
-
usdHuman: zod.z.string().min(1)
|
|
1515
|
-
});
|
|
1516
|
-
var mcpHyperliquidVaultWithdrawInputSchema = mcpHyperliquidMultisignInput({
|
|
1517
|
-
vaultAddress: evmAddressSchema,
|
|
1518
|
-
usdHuman: zod.z.string().min(1)
|
|
2003
|
+
toPerp: agentBooleanSchema()
|
|
1519
2004
|
});
|
|
2005
|
+
var mcpHyperliquidVaultDepositInputSchema = mcpHyperliquidMultisignInput(
|
|
2006
|
+
{
|
|
2007
|
+
vaultAddress: evmAddressSchema.describe("vaultAddress from fetch_vaults"),
|
|
2008
|
+
usdHuman: zod.z.string().min(1),
|
|
2009
|
+
vaultName: zod.z.string().optional().describe("name from fetch_vaults row")
|
|
2010
|
+
},
|
|
2011
|
+
preprocessHyperliquidVaultDepositInput
|
|
2012
|
+
);
|
|
2013
|
+
var mcpHyperliquidVaultWithdrawInputSchema = mcpHyperliquidMultisignInput(
|
|
2014
|
+
{
|
|
2015
|
+
vaultAddress: evmAddressSchema,
|
|
2016
|
+
usdHuman: zod.z.string().min(1).describe("equity from fetch_user_vault_equities")
|
|
2017
|
+
},
|
|
2018
|
+
preprocessHyperliquidVaultWithdrawInput
|
|
2019
|
+
);
|
|
1520
2020
|
var mcpHyperliquidStakeInputSchema = mcpHyperliquidMultisignInput({
|
|
1521
2021
|
hypeHuman: zod.z.string().min(1)
|
|
1522
2022
|
});
|
|
@@ -1527,9 +2027,76 @@ var mcpHyperliquidDelegateInputSchema = mcpHyperliquidMultisignInput({
|
|
|
1527
2027
|
hypeHuman: zod.z.string().min(1),
|
|
1528
2028
|
validator: evmAddressSchema
|
|
1529
2029
|
});
|
|
1530
|
-
var mcpHyperliquidUndelegateInputSchema = mcpHyperliquidMultisignInput(
|
|
1531
|
-
|
|
1532
|
-
|
|
2030
|
+
var mcpHyperliquidUndelegateInputSchema = mcpHyperliquidMultisignInput(
|
|
2031
|
+
{
|
|
2032
|
+
hypeHuman: zod.z.string().min(1).describe("amount from fetch_delegations"),
|
|
2033
|
+
validator: evmAddressSchema
|
|
2034
|
+
},
|
|
2035
|
+
preprocessHyperliquidUndelegateInput
|
|
2036
|
+
);
|
|
2037
|
+
var mcpCctpFeeFieldsSchema = zod.z.object({
|
|
2038
|
+
feeTierUsed: zod.z.enum(["low", "med", "high"]),
|
|
2039
|
+
maxFee: zod.z.string().describe("Selected tier max fee in USDC base units (6 decimals)"),
|
|
2040
|
+
maxFeeHuman: zod.z.string().describe("Human-readable USDC max forwarding fee for feeTierUsed"),
|
|
2041
|
+
forwardFeeLow: zod.z.string(),
|
|
2042
|
+
forwardFeeLowHuman: zod.z.string(),
|
|
2043
|
+
forwardFeeMed: zod.z.string(),
|
|
2044
|
+
forwardFeeMedHuman: zod.z.string(),
|
|
2045
|
+
forwardFeeHigh: zod.z.string(),
|
|
2046
|
+
forwardFeeHighHuman: zod.z.string(),
|
|
2047
|
+
transferAmount: zod.z.string().optional(),
|
|
2048
|
+
transferAmountHuman: zod.z.string().optional(),
|
|
2049
|
+
totalBurn: zod.z.string().optional().describe("transferAmount + maxFee when transferAmountHuman was provided"),
|
|
2050
|
+
totalBurnHuman: zod.z.string().optional(),
|
|
2051
|
+
feeSummary: zod.z.string().describe("Plain-language fee summary for agents")
|
|
2052
|
+
});
|
|
2053
|
+
var mcpCctpFetchSupportedRoutesInputSchema = zod.z.object({
|
|
2054
|
+
network: zod.z.enum(["mainnet", "testnet"]).optional().describe("Filter routes by network; omit for all")
|
|
2055
|
+
});
|
|
2056
|
+
var mcpCctpFetchSupportedRoutesOutputSchema = jsonObjectSchema.describe(
|
|
2057
|
+
"{ routes: [{ sourceChainId, destChainId, sourceDomain, destDomain, sourceLabel, destLabel, network }] }"
|
|
2058
|
+
);
|
|
2059
|
+
var mcpCctpFetchBurnFeesInputSchema = zod.z.object({
|
|
2060
|
+
sourceChainId: agentEvmChainIdSchema.describe("Source chain EIP-155 id (burn chain)"),
|
|
2061
|
+
destChainId: agentEvmChainIdSchema.describe("Destination chain EIP-155 id (mint chain)"),
|
|
2062
|
+
transferAmountHuman: zod.z.string().min(1).optional().describe("Human USDC amount recipient receives (6 decimals). Omit for tier fees only; include for totalBurn."),
|
|
2063
|
+
feeTier: zod.z.enum(["low", "med", "high"]).optional().describe("Iris forwardFee tier; default med")
|
|
2064
|
+
});
|
|
2065
|
+
var mcpCctpFetchBurnFeesOutputSchema = zod.z.object({
|
|
2066
|
+
sourceChainId: zod.z.number(),
|
|
2067
|
+
destChainId: zod.z.number(),
|
|
2068
|
+
sourceDomain: zod.z.number(),
|
|
2069
|
+
destDomain: zod.z.number(),
|
|
2070
|
+
sourceLabel: zod.z.string(),
|
|
2071
|
+
destLabel: zod.z.string(),
|
|
2072
|
+
network: zod.z.enum(["mainnet", "testnet"]),
|
|
2073
|
+
fees: mcpCctpFeeFieldsSchema
|
|
2074
|
+
}).passthrough().describe("Iris Forwarding Service fee quote with human-readable USDC amounts in fees and top-level fee fields");
|
|
2075
|
+
var mcpCctpFetchUsdcBalanceInputSchema = zod.z.object({
|
|
2076
|
+
chainId: agentEvmChainIdSchema.describe("Source chain to read USDC balance on"),
|
|
2077
|
+
executorAddress: evmAddressSchema.optional().describe("Server-filled from keyGenId when omitted"),
|
|
2078
|
+
rpcUrl: zod.z.string().min(1).optional().describe("Server-filled from chain registry"),
|
|
2079
|
+
transferAmountHuman: zod.z.string().min(1).optional().describe("When set with feeSnapshot, returns requiredTotalBurn* and sufficientForTransfer"),
|
|
2080
|
+
feeSnapshot: jsonObjectSchema.optional().describe("Output from ctm_cctp_fetch_burn_fees (uses maxFee) for balance sufficiency check")
|
|
2081
|
+
});
|
|
2082
|
+
var mcpCctpFetchUsdcBalanceOutputSchema = jsonObjectSchema.describe(
|
|
2083
|
+
"{ balanceUsdcHuman, balanceRaw, usdcAddress, requiredTotalBurnHuman?, sufficientForTransfer?, feeSummary? }"
|
|
2084
|
+
);
|
|
2085
|
+
var mcpCctpFetchTransferStatusInputSchema = zod.z.object({
|
|
2086
|
+
sourceChainId: agentEvmChainIdSchema.describe("Source chain where burn was executed"),
|
|
2087
|
+
sourceDomain: zod.z.number().int().min(0).describe("CCTP domain id of source chain"),
|
|
2088
|
+
burnTxHash: zod.z.string().min(1).describe("Burn transaction hash (0x-prefixed or raw)")
|
|
2089
|
+
});
|
|
2090
|
+
var mcpCctpFetchTransferStatusOutputSchema = jsonObjectSchema.describe(
|
|
2091
|
+
"{ status, attestation?, message?, eventNonce? } from Iris /v2/messages"
|
|
2092
|
+
);
|
|
2093
|
+
var mcpCctpBuildBurnMultisignInputSchema = mcpMultisignInput({
|
|
2094
|
+
destChainId: agentEvmChainIdSchema.describe("Destination chain EIP-155 id (mint chain)"),
|
|
2095
|
+
transferAmountHuman: zod.z.string().min(1).describe("Human USDC amount recipient receives"),
|
|
2096
|
+
mintRecipient: evmAddressSchema.optional().describe("Recipient on destination chain; defaults to MPC executor address"),
|
|
2097
|
+
feeTier: zod.z.enum(["low", "med", "high"]).optional(),
|
|
2098
|
+
minFinalityThreshold: zod.z.number().int().positive().optional(),
|
|
2099
|
+
feeSnapshot: jsonObjectSchema.optional().describe("Optional output from ctm_cctp_fetch_burn_fees")
|
|
1533
2100
|
});
|
|
1534
2101
|
|
|
1535
2102
|
// src/agent/mcpProtocolTools.ts
|
|
@@ -1842,8 +2409,7 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
|
|
|
1842
2409
|
prerequisites: [
|
|
1843
2410
|
"keyGenId",
|
|
1844
2411
|
"chainId",
|
|
1845
|
-
"vaultAddress from ctm_morpho_fetch_earn_vaults",
|
|
1846
|
-
"underlying",
|
|
2412
|
+
"vaultAddress + underlyingAddress from ctm_morpho_fetch_earn_vaults",
|
|
1847
2413
|
"amountHuman"
|
|
1848
2414
|
],
|
|
1849
2415
|
handler: { importPath: "protocols/evm/morpho", exportName: "buildEvmMultisignBodyMorphoVaultDepositBatch" },
|
|
@@ -2086,6 +2652,26 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
|
|
|
2086
2652
|
prerequisites: ["keyGen", "executorAddress", "delegation from fetch_delegations"],
|
|
2087
2653
|
handler: { importPath: "protocols/evm/hyperliquid", exportName: "buildEvmMultisignBodyHyperliquidUndelegateBatch" },
|
|
2088
2654
|
inputZod: mcpHyperliquidUndelegateInputSchema
|
|
2655
|
+
}),
|
|
2656
|
+
defineProtocolMcpTool({
|
|
2657
|
+
name: "ctm_cctp_build_burn_multisign",
|
|
2658
|
+
actionId: "circle-cctp.burn-forward",
|
|
2659
|
+
protocolId: "circle-cctp",
|
|
2660
|
+
chainCategory: "evm",
|
|
2661
|
+
description: "Create and submit mpc-auth multiSignRequest for CCTP Forwarding Service USDC transfer (approve + depositForBurnWithHook on source chain).",
|
|
2662
|
+
prerequisites: [
|
|
2663
|
+
"ctm_cctp_fetch_burn_fees (required)",
|
|
2664
|
+
"keyGenId",
|
|
2665
|
+
"chainId = source chain",
|
|
2666
|
+
"destChainId",
|
|
2667
|
+
"transferAmountHuman",
|
|
2668
|
+
"sufficient USDC on source"
|
|
2669
|
+
],
|
|
2670
|
+
handler: {
|
|
2671
|
+
importPath: "protocols/evm/circle-cctp",
|
|
2672
|
+
exportName: "buildEvmMultisignBodyCctpBurnBatchFromMcp"
|
|
2673
|
+
},
|
|
2674
|
+
inputZod: mcpCctpBuildBurnMultisignInputSchema
|
|
2089
2675
|
})
|
|
2090
2676
|
];
|
|
2091
2677
|
|
|
@@ -2369,13 +2955,25 @@ var CORE_MCP_TOOL_DEFINITIONS = [
|
|
|
2369
2955
|
actionId: "gmx.fetch-positions",
|
|
2370
2956
|
protocolId: "gmx",
|
|
2371
2957
|
chainCategory: "evm",
|
|
2372
|
-
description: "Fetch open GMX perp positions
|
|
2958
|
+
description: "Fetch open GMX perp positions (symbol, direction, sizeUsd, collateralSymbol) for build_decrease. Read-only.",
|
|
2373
2959
|
prerequisites: ["chainId", "executorAddress (MPC ethereumaddress)"],
|
|
2374
2960
|
followUp: ["ctm_gmx_build_decrease_multisign"],
|
|
2375
2961
|
handler: { importPath: "protocols/evm/gmx", exportName: "gmxFetchPositionsForExecutor" },
|
|
2376
2962
|
inputZod: mcpGmxFetchPositionsInputSchema,
|
|
2377
2963
|
outputZod: mcpGmxFetchPositionsOutputSchema
|
|
2378
2964
|
}),
|
|
2965
|
+
defineMcpTool({
|
|
2966
|
+
name: "ctm_gmx_fetch_orders",
|
|
2967
|
+
actionId: "gmx.fetch-orders",
|
|
2968
|
+
protocolId: "gmx",
|
|
2969
|
+
chainCategory: "evm",
|
|
2970
|
+
description: "Fetch pending GMX orders (orderId) for build_cancel_multisign. Read-only.",
|
|
2971
|
+
prerequisites: ["chainId", "executorAddress"],
|
|
2972
|
+
followUp: ["ctm_gmx_build_cancel_multisign"],
|
|
2973
|
+
handler: { importPath: "protocols/evm/gmx", exportName: "gmxFetchOrdersSummary" },
|
|
2974
|
+
inputZod: mcpGmxFetchOrdersInputSchema,
|
|
2975
|
+
outputZod: mcpGmxFetchOrdersOutputSchema
|
|
2976
|
+
}),
|
|
2379
2977
|
defineMcpTool({
|
|
2380
2978
|
name: "ctm_gmx_fetch_market_prices",
|
|
2381
2979
|
actionId: "gmx.fetch-market-prices",
|
|
@@ -2580,6 +3178,82 @@ var CORE_MCP_TOOL_DEFINITIONS = [
|
|
|
2580
3178
|
inputZod: mcpHyperliquidFetchDelegationsInputSchema,
|
|
2581
3179
|
outputZod: mcpHyperliquidFetchDelegationsOutputSchema
|
|
2582
3180
|
}),
|
|
3181
|
+
defineMcpTool({
|
|
3182
|
+
name: "ctm_morpho_fetch_blue_markets",
|
|
3183
|
+
actionId: "morpho.fetch-blue-markets",
|
|
3184
|
+
protocolId: "morpho",
|
|
3185
|
+
chainCategory: "evm",
|
|
3186
|
+
description: "Morpho Blue borrow markets. Filter by collateral/loan asset; returns marketId and token addresses for blue multisign tools.",
|
|
3187
|
+
prerequisites: ["chainId"],
|
|
3188
|
+
followUp: [
|
|
3189
|
+
"ctm_morpho_build_blue_collateral_deposit_multisign",
|
|
3190
|
+
"ctm_morpho_build_blue_borrow_multisign",
|
|
3191
|
+
"ctm_morpho_build_blue_repay_multisign"
|
|
3192
|
+
],
|
|
3193
|
+
handler: { importPath: "protocols/evm/morpho", exportName: "morphoFetchBlueMarketsSummary" },
|
|
3194
|
+
inputZod: mcpMorphoFetchBlueMarketsInputSchema,
|
|
3195
|
+
outputZod: mcpMorphoFetchBlueMarketsOutputSchema
|
|
3196
|
+
}),
|
|
3197
|
+
defineMcpTool({
|
|
3198
|
+
name: "ctm_euler_v2_fetch_lend_vaults",
|
|
3199
|
+
actionId: "euler-v2.fetch-lend-vaults",
|
|
3200
|
+
protocolId: "euler-v2",
|
|
3201
|
+
chainCategory: "evm",
|
|
3202
|
+
description: "Euler v2 isolated lend vaults for an underlying asset. Returns evaultAddress for build_isolated_lend_multisign.",
|
|
3203
|
+
prerequisites: ["chainId", "underlyingAddress from get_defi_protocol_supported_tokens"],
|
|
3204
|
+
followUp: ["ctm_euler_v2_build_isolated_lend_multisign"],
|
|
3205
|
+
handler: { importPath: "protocols/evm/euler-v2", exportName: "eulerV2FetchLendVaultsSummary" },
|
|
3206
|
+
inputZod: mcpEulerV2FetchLendVaultsInputSchema,
|
|
3207
|
+
outputZod: mcpEulerV2FetchLendVaultsOutputSchema
|
|
3208
|
+
}),
|
|
3209
|
+
defineMcpTool({
|
|
3210
|
+
name: "ctm_cctp_fetch_supported_routes",
|
|
3211
|
+
actionId: "circle-cctp.fetch-routes",
|
|
3212
|
+
protocolId: "circle-cctp",
|
|
3213
|
+
chainCategory: "evm",
|
|
3214
|
+
description: "List supported Circle CCTP V2 Forwarding Service routes (EVM source \u2192 destination pairs on mainnet or testnet). Read-only.",
|
|
3215
|
+
prerequisites: ["load_defi_protocol", "get_chain_registry"],
|
|
3216
|
+
followUp: ["ctm_cctp_fetch_burn_fees"],
|
|
3217
|
+
handler: { importPath: "protocols/evm/circle-cctp", exportName: "cctpFetchSupportedRoutes" },
|
|
3218
|
+
inputZod: mcpCctpFetchSupportedRoutesInputSchema,
|
|
3219
|
+
outputZod: mcpCctpFetchSupportedRoutesOutputSchema
|
|
3220
|
+
}),
|
|
3221
|
+
defineMcpTool({
|
|
3222
|
+
name: "ctm_cctp_fetch_burn_fees",
|
|
3223
|
+
actionId: "circle-cctp.fetch-fees",
|
|
3224
|
+
protocolId: "circle-cctp",
|
|
3225
|
+
chainCategory: "evm",
|
|
3226
|
+
description: "Quote Circle Iris Forwarding Service burn fees (?forward=true) for a CCTP route. Returns human-readable USDC fee tiers and totalBurn when transferAmountHuman is set. Does NOT create a sign request.",
|
|
3227
|
+
prerequisites: ["supported route (ctm_cctp_fetch_supported_routes)"],
|
|
3228
|
+
followUp: ["ctm_cctp_fetch_usdc_balance", "ctm_cctp_build_burn_multisign"],
|
|
3229
|
+
handler: { importPath: "protocols/evm/circle-cctp", exportName: "cctpFetchBurnFeesForRoute" },
|
|
3230
|
+
inputZod: mcpCctpFetchBurnFeesInputSchema,
|
|
3231
|
+
outputZod: mcpCctpFetchBurnFeesOutputSchema
|
|
3232
|
+
}),
|
|
3233
|
+
defineMcpTool({
|
|
3234
|
+
name: "ctm_cctp_fetch_usdc_balance",
|
|
3235
|
+
actionId: "circle-cctp.fetch-usdc-balance",
|
|
3236
|
+
protocolId: "circle-cctp",
|
|
3237
|
+
chainCategory: "evm",
|
|
3238
|
+
description: "Read MPC wallet USDC balance on a CCTP source chain. Read-only.",
|
|
3239
|
+
prerequisites: ["chainId (source)", "executorAddress or keyGenId"],
|
|
3240
|
+
followUp: ["ctm_cctp_build_burn_multisign"],
|
|
3241
|
+
handler: { importPath: "protocols/evm/circle-cctp", exportName: "cctpFetchUsdcBalance" },
|
|
3242
|
+
inputZod: mcpCctpFetchUsdcBalanceInputSchema,
|
|
3243
|
+
outputZod: mcpCctpFetchUsdcBalanceOutputSchema
|
|
3244
|
+
}),
|
|
3245
|
+
defineMcpTool({
|
|
3246
|
+
name: "ctm_cctp_fetch_transfer_status",
|
|
3247
|
+
actionId: "circle-cctp.fetch-status",
|
|
3248
|
+
protocolId: "circle-cctp",
|
|
3249
|
+
chainCategory: "evm",
|
|
3250
|
+
description: "Poll Circle Iris for CCTP message/attestation status after source-chain burn Execute. Read-only.",
|
|
3251
|
+
prerequisites: ["sourceChainId", "sourceDomain", "burnTxHash from broadcast"],
|
|
3252
|
+
followUp: [],
|
|
3253
|
+
handler: { importPath: "protocols/evm/circle-cctp", exportName: "cctpFetchTransferStatus" },
|
|
3254
|
+
inputZod: mcpCctpFetchTransferStatusInputSchema,
|
|
3255
|
+
outputZod: mcpCctpFetchTransferStatusOutputSchema
|
|
3256
|
+
}),
|
|
2583
3257
|
defineMcpTool({
|
|
2584
3258
|
name: "ctm_morpho_fetch_earn_vaults",
|
|
2585
3259
|
actionId: "morpho.fetch-earn-vaults",
|
|
@@ -2647,7 +3321,7 @@ function getAgentCatalogForMcp() {
|
|
|
2647
3321
|
"1. Quote (protocol-specific API if needed)",
|
|
2648
3322
|
"2. Build protocol calldata (e.g. create_swap)",
|
|
2649
3323
|
"3. build_*_multisign \u2192 { requestId } (MCP auto-submits)",
|
|
2650
|
-
"4.
|
|
3324
|
+
"4. sign_request_agree \u2192 trigger_sign_result \u2192 broadcast_sign_result (do not poll wait_for_sign_request_ready \u2014 Join may take days)"
|
|
2651
3325
|
],
|
|
2652
3326
|
evmSwapManualTypical: [
|
|
2653
3327
|
"1. Quote (protocol-specific API if needed)",
|
|
@@ -2666,7 +3340,7 @@ function getAgentCatalogForMcp() {
|
|
|
2666
3340
|
"1. load_defi_protocol for the target protocol",
|
|
2667
3341
|
"2. get_defi_protocol_supported_chains / get_token_registry to pick chainId and tokens",
|
|
2668
3342
|
"3. MCP build_* tool with keyGenId + chainId \u2192 { requestId }",
|
|
2669
|
-
"4. Base MCP:
|
|
3343
|
+
"4. Base MCP: sign_request_agree \u2192 trigger_sign_result \u2192 broadcast_sign_result (no wait_for_sign_request_ready polling after submit)"
|
|
2670
3344
|
]
|
|
2671
3345
|
}
|
|
2672
3346
|
};
|
|
@@ -3551,6 +4225,185 @@ var morphoProtocolModule = {
|
|
|
3551
4225
|
]
|
|
3552
4226
|
};
|
|
3553
4227
|
registerProtocolModule(morphoProtocolModule);
|
|
4228
|
+
|
|
4229
|
+
// src/protocols/evm/circle-cctp/constants.ts
|
|
4230
|
+
var CIRCLE_CCTP_PROTOCOL_ID = "circle-cctp";
|
|
4231
|
+
var TOKEN_MESSENGER_V2_MAINNET = "0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d";
|
|
4232
|
+
var TOKEN_MESSENGER_V2_TESTNET = "0x8FE6B999Dc680CcFDD5Bf7EB0974218be2542DAA";
|
|
4233
|
+
var CCTP_EVM_CHAINS = [
|
|
4234
|
+
{
|
|
4235
|
+
chainId: 1,
|
|
4236
|
+
domain: 0,
|
|
4237
|
+
network: "mainnet",
|
|
4238
|
+
usdc: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
|
|
4239
|
+
tokenMessenger: TOKEN_MESSENGER_V2_MAINNET,
|
|
4240
|
+
label: "Ethereum"
|
|
4241
|
+
},
|
|
4242
|
+
{
|
|
4243
|
+
chainId: 43114,
|
|
4244
|
+
domain: 1,
|
|
4245
|
+
network: "mainnet",
|
|
4246
|
+
usdc: "0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E",
|
|
4247
|
+
tokenMessenger: TOKEN_MESSENGER_V2_MAINNET,
|
|
4248
|
+
label: "Avalanche"
|
|
4249
|
+
},
|
|
4250
|
+
{
|
|
4251
|
+
chainId: 10,
|
|
4252
|
+
domain: 2,
|
|
4253
|
+
network: "mainnet",
|
|
4254
|
+
usdc: "0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85",
|
|
4255
|
+
tokenMessenger: TOKEN_MESSENGER_V2_MAINNET,
|
|
4256
|
+
label: "OP Mainnet"
|
|
4257
|
+
},
|
|
4258
|
+
{
|
|
4259
|
+
chainId: 42161,
|
|
4260
|
+
domain: 3,
|
|
4261
|
+
network: "mainnet",
|
|
4262
|
+
usdc: "0xaf88d065e77c8cC2239327C5EDb3A432268e5831",
|
|
4263
|
+
tokenMessenger: TOKEN_MESSENGER_V2_MAINNET,
|
|
4264
|
+
label: "Arbitrum"
|
|
4265
|
+
},
|
|
4266
|
+
{
|
|
4267
|
+
chainId: 8453,
|
|
4268
|
+
domain: 6,
|
|
4269
|
+
network: "mainnet",
|
|
4270
|
+
usdc: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
|
|
4271
|
+
tokenMessenger: TOKEN_MESSENGER_V2_MAINNET,
|
|
4272
|
+
label: "Base"
|
|
4273
|
+
},
|
|
4274
|
+
{
|
|
4275
|
+
chainId: 137,
|
|
4276
|
+
domain: 7,
|
|
4277
|
+
network: "mainnet",
|
|
4278
|
+
usdc: "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359",
|
|
4279
|
+
tokenMessenger: TOKEN_MESSENGER_V2_MAINNET,
|
|
4280
|
+
label: "Polygon PoS"
|
|
4281
|
+
},
|
|
4282
|
+
{
|
|
4283
|
+
chainId: 11155111,
|
|
4284
|
+
domain: 0,
|
|
4285
|
+
network: "testnet",
|
|
4286
|
+
usdc: "0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238",
|
|
4287
|
+
tokenMessenger: TOKEN_MESSENGER_V2_TESTNET,
|
|
4288
|
+
label: "Ethereum Sepolia"
|
|
4289
|
+
},
|
|
4290
|
+
{
|
|
4291
|
+
chainId: 43113,
|
|
4292
|
+
domain: 1,
|
|
4293
|
+
network: "testnet",
|
|
4294
|
+
usdc: "0x5425890298aed601595a70AB815c96711a31Bc65",
|
|
4295
|
+
tokenMessenger: TOKEN_MESSENGER_V2_TESTNET,
|
|
4296
|
+
label: "Avalanche Fuji"
|
|
4297
|
+
},
|
|
4298
|
+
{
|
|
4299
|
+
chainId: 11155420,
|
|
4300
|
+
domain: 2,
|
|
4301
|
+
network: "testnet",
|
|
4302
|
+
usdc: "0x5fd84259d66Cd46123540766Be93DFE6D43130D7",
|
|
4303
|
+
tokenMessenger: TOKEN_MESSENGER_V2_TESTNET,
|
|
4304
|
+
label: "OP Sepolia"
|
|
4305
|
+
},
|
|
4306
|
+
{
|
|
4307
|
+
chainId: 421614,
|
|
4308
|
+
domain: 3,
|
|
4309
|
+
network: "testnet",
|
|
4310
|
+
usdc: "0x75faf114eafb1BDbe2F0316DF893fd58CE46AA4d",
|
|
4311
|
+
tokenMessenger: TOKEN_MESSENGER_V2_TESTNET,
|
|
4312
|
+
label: "Arbitrum Sepolia"
|
|
4313
|
+
},
|
|
4314
|
+
{
|
|
4315
|
+
chainId: 84532,
|
|
4316
|
+
domain: 6,
|
|
4317
|
+
network: "testnet",
|
|
4318
|
+
usdc: "0x036CbD53842c5426634e7929541eC2318f3dCF7e",
|
|
4319
|
+
tokenMessenger: TOKEN_MESSENGER_V2_TESTNET,
|
|
4320
|
+
label: "Base Sepolia"
|
|
4321
|
+
},
|
|
4322
|
+
{
|
|
4323
|
+
chainId: 80002,
|
|
4324
|
+
domain: 7,
|
|
4325
|
+
network: "testnet",
|
|
4326
|
+
usdc: "0x41E94Eb019C0762f9Bfcf9Fb1E58725BfB0e7582",
|
|
4327
|
+
tokenMessenger: TOKEN_MESSENGER_V2_TESTNET,
|
|
4328
|
+
label: "Polygon Amoy"
|
|
4329
|
+
}
|
|
4330
|
+
];
|
|
4331
|
+
function cctpChainConfig(chainId) {
|
|
4332
|
+
return CCTP_EVM_CHAINS.find((c) => c.chainId === chainId) ?? null;
|
|
4333
|
+
}
|
|
4334
|
+
function parseCctpEvmChainId(chainId) {
|
|
4335
|
+
if (typeof chainId === "number") {
|
|
4336
|
+
return Number.isFinite(chainId) ? chainId : Number.NaN;
|
|
4337
|
+
}
|
|
4338
|
+
const t = String(chainId).trim();
|
|
4339
|
+
if (!t) return Number.NaN;
|
|
4340
|
+
const low = t.toLowerCase();
|
|
4341
|
+
if (low.startsWith("eip155:")) {
|
|
4342
|
+
const n2 = Number.parseInt(t.slice("eip155:".length).trim(), 10);
|
|
4343
|
+
return Number.isFinite(n2) ? n2 : Number.NaN;
|
|
4344
|
+
}
|
|
4345
|
+
if (low.startsWith("0x")) {
|
|
4346
|
+
const n2 = Number.parseInt(t, 16);
|
|
4347
|
+
return Number.isFinite(n2) ? n2 : Number.NaN;
|
|
4348
|
+
}
|
|
4349
|
+
const n = Number.parseInt(t, 10);
|
|
4350
|
+
return Number.isFinite(n) ? n : Number.NaN;
|
|
4351
|
+
}
|
|
4352
|
+
function isCctpSourceChainSupported(chainId) {
|
|
4353
|
+
const n = parseCctpEvmChainId(chainId);
|
|
4354
|
+
return Number.isFinite(n) && cctpChainConfig(n) != null;
|
|
4355
|
+
}
|
|
4356
|
+
|
|
4357
|
+
// src/protocols/evm/circle-cctp/index.ts
|
|
4358
|
+
var circleCctpProtocolModule = {
|
|
4359
|
+
id: CIRCLE_CCTP_PROTOCOL_ID,
|
|
4360
|
+
chainCategory: "evm",
|
|
4361
|
+
isChainSupported(ctx) {
|
|
4362
|
+
if (ctx.chainCategory !== "evm") return false;
|
|
4363
|
+
return isCctpSourceChainSupported(ctx.chainId);
|
|
4364
|
+
},
|
|
4365
|
+
isTokenSupported(token) {
|
|
4366
|
+
return token.category === "evm" && token.kind === "erc20";
|
|
4367
|
+
},
|
|
4368
|
+
actions: [
|
|
4369
|
+
{
|
|
4370
|
+
id: "circle-cctp.fetch-routes",
|
|
4371
|
+
protocolId: CIRCLE_CCTP_PROTOCOL_ID,
|
|
4372
|
+
chainCategory: "evm",
|
|
4373
|
+
description: "List supported CCTP Forwarding Service routes (EVM)",
|
|
4374
|
+
commonParams: [],
|
|
4375
|
+
params: {
|
|
4376
|
+
network: { type: "string", required: false, description: "mainnet | testnet" }
|
|
4377
|
+
}
|
|
4378
|
+
},
|
|
4379
|
+
{
|
|
4380
|
+
id: "circle-cctp.fetch-fees",
|
|
4381
|
+
protocolId: CIRCLE_CCTP_PROTOCOL_ID,
|
|
4382
|
+
chainCategory: "evm",
|
|
4383
|
+
description: "Quote Iris Forwarding Service burn fees for a route",
|
|
4384
|
+
commonParams: [],
|
|
4385
|
+
params: {
|
|
4386
|
+
sourceChainId: { type: "number", required: true, description: "Source EIP-155 chain id" },
|
|
4387
|
+
destChainId: { type: "number", required: true, description: "Destination EIP-155 chain id" },
|
|
4388
|
+
transferAmountHuman: { type: "string", required: true, description: "USDC amount recipient receives" }
|
|
4389
|
+
}
|
|
4390
|
+
},
|
|
4391
|
+
{
|
|
4392
|
+
id: "circle-cctp.burn-forward",
|
|
4393
|
+
protocolId: CIRCLE_CCTP_PROTOCOL_ID,
|
|
4394
|
+
chainCategory: "evm",
|
|
4395
|
+
description: "Burn USDC on source chain via CCTP Forwarding Service (approve + depositForBurnWithHook batch)",
|
|
4396
|
+
commonParams: ["keyGen", "purposeText", "useCustomGas"],
|
|
4397
|
+
params: {
|
|
4398
|
+
sourceChainId: { type: "number", required: true, description: "Source EIP-155 chain id" },
|
|
4399
|
+
destChainId: { type: "number", required: true, description: "Destination EIP-155 chain id" },
|
|
4400
|
+
transferAmountHuman: { type: "string", required: true, description: "USDC amount recipient receives" },
|
|
4401
|
+
mintRecipient: { type: "address", required: false, description: "Destination mint recipient (default executor)" }
|
|
4402
|
+
}
|
|
4403
|
+
}
|
|
4404
|
+
]
|
|
4405
|
+
};
|
|
4406
|
+
registerProtocolModule(circleCctpProtocolModule);
|
|
3554
4407
|
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");
|
|
3555
4408
|
var SKILL_PROTOCOL_IDS = [
|
|
3556
4409
|
"aave-v4",
|
|
@@ -3563,7 +4416,8 @@ var SKILL_PROTOCOL_IDS = [
|
|
|
3563
4416
|
"sky",
|
|
3564
4417
|
"gmx",
|
|
3565
4418
|
"hyperliquid",
|
|
3566
|
-
"morpho"
|
|
4419
|
+
"morpho",
|
|
4420
|
+
"circle-cctp"
|
|
3567
4421
|
];
|
|
3568
4422
|
function getToolsForProtocol(protocolId) {
|
|
3569
4423
|
return MCP_TOOL_DEFINITIONS.filter((t) => t.protocolId === protocolId);
|
|
@@ -3890,6 +4744,7 @@ registerProtocolModule(eulerV2ProtocolModule);
|
|
|
3890
4744
|
registerProtocolModule(gmxProtocolModule);
|
|
3891
4745
|
registerProtocolModule(hyperliquidProtocolModule);
|
|
3892
4746
|
registerProtocolModule(morphoProtocolModule);
|
|
4747
|
+
registerProtocolModule(circleCctpProtocolModule);
|
|
3893
4748
|
function getAgentCatalog() {
|
|
3894
4749
|
return {
|
|
3895
4750
|
protocols: getProtocolModules(),
|
|
@@ -3909,6 +4764,7 @@ function getAgentCatalog() {
|
|
|
3909
4764
|
gmx: gmxProtocolModule,
|
|
3910
4765
|
hyperliquid: hyperliquidProtocolModule,
|
|
3911
4766
|
morpho: morphoProtocolModule,
|
|
4767
|
+
circleCctp: circleCctpProtocolModule,
|
|
3912
4768
|
/** Prefer getAgentCatalogForMcp() or getMcpToolDefinitions() for MCP servers. */
|
|
3913
4769
|
mcp: getAgentCatalogForMcp()
|
|
3914
4770
|
};
|
|
@@ -3956,6 +4812,8 @@ exports.mcpEthenaStakeInputSchema = mcpEthenaStakeInputSchema;
|
|
|
3956
4812
|
exports.mcpEulerV2BorrowRepayInputSchema = mcpEulerV2BorrowRepayInputSchema;
|
|
3957
4813
|
exports.mcpEulerV2CollateralDepositInputSchema = mcpEulerV2CollateralDepositInputSchema;
|
|
3958
4814
|
exports.mcpEulerV2CollateralWithdrawInputSchema = mcpEulerV2CollateralWithdrawInputSchema;
|
|
4815
|
+
exports.mcpEulerV2FetchLendVaultsInputSchema = mcpEulerV2FetchLendVaultsInputSchema;
|
|
4816
|
+
exports.mcpEulerV2FetchLendVaultsOutputSchema = mcpEulerV2FetchLendVaultsOutputSchema;
|
|
3959
4817
|
exports.mcpEulerV2IsolatedBorrowInputSchema = mcpEulerV2IsolatedBorrowInputSchema;
|
|
3960
4818
|
exports.mcpEulerV2IsolatedLendInputSchema = mcpEulerV2IsolatedLendInputSchema;
|
|
3961
4819
|
exports.mcpEulerV2VaultWithdrawInputSchema = mcpEulerV2VaultWithdrawInputSchema;
|
|
@@ -3971,6 +4829,8 @@ exports.mcpGmxFetchMarketsInputSchema = mcpGmxFetchMarketsInputSchema;
|
|
|
3971
4829
|
exports.mcpGmxFetchMarketsOutputSchema = mcpGmxFetchMarketsOutputSchema;
|
|
3972
4830
|
exports.mcpGmxFetchOhlcvInputSchema = mcpGmxFetchOhlcvInputSchema;
|
|
3973
4831
|
exports.mcpGmxFetchOhlcvOutputSchema = mcpGmxFetchOhlcvOutputSchema;
|
|
4832
|
+
exports.mcpGmxFetchOrdersInputSchema = mcpGmxFetchOrdersInputSchema;
|
|
4833
|
+
exports.mcpGmxFetchOrdersOutputSchema = mcpGmxFetchOrdersOutputSchema;
|
|
3974
4834
|
exports.mcpGmxFetchPositionsInputSchema = mcpGmxFetchPositionsInputSchema;
|
|
3975
4835
|
exports.mcpGmxFetchPositionsOutputSchema = mcpGmxFetchPositionsOutputSchema;
|
|
3976
4836
|
exports.mcpGmxFetchStakingPowerInputSchema = mcpGmxFetchStakingPowerInputSchema;
|
|
@@ -4026,6 +4886,8 @@ exports.mcpMorphoBlueBorrowInputSchema = mcpMorphoBlueBorrowInputSchema;
|
|
|
4026
4886
|
exports.mcpMorphoBlueCollateralDepositInputSchema = mcpMorphoBlueCollateralDepositInputSchema;
|
|
4027
4887
|
exports.mcpMorphoBlueCollateralWithdrawInputSchema = mcpMorphoBlueCollateralWithdrawInputSchema;
|
|
4028
4888
|
exports.mcpMorphoBlueRepayInputSchema = mcpMorphoBlueRepayInputSchema;
|
|
4889
|
+
exports.mcpMorphoFetchBlueMarketsInputSchema = mcpMorphoFetchBlueMarketsInputSchema;
|
|
4890
|
+
exports.mcpMorphoFetchBlueMarketsOutputSchema = mcpMorphoFetchBlueMarketsOutputSchema;
|
|
4029
4891
|
exports.mcpMorphoFetchEarnVaultsInputSchema = mcpMorphoFetchEarnVaultsInputSchema;
|
|
4030
4892
|
exports.mcpMorphoFetchEarnVaultsOutputSchema = mcpMorphoFetchEarnVaultsOutputSchema;
|
|
4031
4893
|
exports.mcpMorphoMerklClaimInputSchema = mcpMorphoMerklClaimInputSchema;
|