@continuumdao/ctm-mpc-defi 0.2.25 → 0.2.27
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 +400 -8
- package/dist/agent/catalog.cjs.map +1 -1
- package/dist/agent/catalog.d.ts +266 -1
- package/dist/agent/catalog.js +387 -9
- package/dist/agent/catalog.js.map +1 -1
- package/dist/agent/skills/arcus/SKILL.md +4 -0
- package/dist/agent/skills/morpho/SKILL.md +39 -0
- package/dist/agent/skills/venice/SKILL.md +29 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/protocols/evm/arcus/index.cjs +9 -2
- package/dist/protocols/evm/arcus/index.cjs.map +1 -1
- package/dist/protocols/evm/arcus/index.d.ts +3 -1
- package/dist/protocols/evm/arcus/index.js +9 -3
- package/dist/protocols/evm/arcus/index.js.map +1 -1
- package/dist/protocols/evm/morpho/index.cjs +76 -2
- package/dist/protocols/evm/morpho/index.cjs.map +1 -1
- package/dist/protocols/evm/morpho/index.d.ts +22 -1
- package/dist/protocols/evm/morpho/index.js +68 -3
- package/dist/protocols/evm/morpho/index.js.map +1 -1
- package/dist/protocols/evm/uniswap-v4/index.cjs +94 -2
- package/dist/protocols/evm/uniswap-v4/index.cjs.map +1 -1
- package/dist/protocols/evm/uniswap-v4/index.d.ts +19 -1
- package/dist/protocols/evm/uniswap-v4/index.js +93 -3
- package/dist/protocols/evm/uniswap-v4/index.js.map +1 -1
- package/dist/protocols/evm/venice/index.cjs +936 -0
- package/dist/protocols/evm/venice/index.cjs.map +1 -0
- package/dist/protocols/evm/venice/index.d.ts +238 -0
- package/dist/protocols/evm/venice/index.js +901 -0
- package/dist/protocols/evm/venice/index.js.map +1 -0
- package/package.json +6 -1
package/dist/agent/catalog.cjs
CHANGED
|
@@ -1354,6 +1354,54 @@ var mcpCurveDaoBuildSwapMultisignInputSchema = withMultisignKeySourceRefine(
|
|
|
1354
1354
|
})
|
|
1355
1355
|
)
|
|
1356
1356
|
);
|
|
1357
|
+
|
|
1358
|
+
// src/protocols/evm/morpho/robinhoodEarn.ts
|
|
1359
|
+
var ROBINHOOD_CHAIN_ID = 4663;
|
|
1360
|
+
var ROBINHOOD_EARN_VAULT_ADDRESS = "0xBeEff033F34C046626B8D0A041844C5d1A5409dd";
|
|
1361
|
+
var ROBINHOOD_EARN_VAULT_SYMBOL = "steakUSDG";
|
|
1362
|
+
var ROBINHOOD_EARN_VAULT_NAME = "Steakhouse USDG";
|
|
1363
|
+
var ROBINHOOD_EARN_USDG_ADDRESS = "0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168";
|
|
1364
|
+
var ROBINHOOD_EARN_QUERY_ALIASES = [
|
|
1365
|
+
"robinhood earn",
|
|
1366
|
+
"robinhood-earn",
|
|
1367
|
+
"robinhood",
|
|
1368
|
+
"earn usdg",
|
|
1369
|
+
"steakhouse usdg",
|
|
1370
|
+
"steakusd g"
|
|
1371
|
+
];
|
|
1372
|
+
function normalizeRobinhoodEarnQuery(query) {
|
|
1373
|
+
return query.trim().toLowerCase().replace(/\s+/g, " ");
|
|
1374
|
+
}
|
|
1375
|
+
function isRobinhoodEarnQuery(query) {
|
|
1376
|
+
if (!query?.trim()) return false;
|
|
1377
|
+
const q = normalizeRobinhoodEarnQuery(query);
|
|
1378
|
+
if (q === ROBINHOOD_EARN_VAULT_ADDRESS.toLowerCase()) return true;
|
|
1379
|
+
return ROBINHOOD_EARN_QUERY_ALIASES.some((alias) => q === alias || q.includes(alias));
|
|
1380
|
+
}
|
|
1381
|
+
function isRobinhoodEarnProductFlag(raw) {
|
|
1382
|
+
if (raw === true || raw === "true") return true;
|
|
1383
|
+
if (typeof raw !== "string") return false;
|
|
1384
|
+
const v = raw.trim().toLowerCase();
|
|
1385
|
+
return v === "robinhood-earn" || v === "robinhood_earn" || v === "robinhood earn";
|
|
1386
|
+
}
|
|
1387
|
+
function applyRobinhoodEarnMultisignDefaults(o) {
|
|
1388
|
+
const flagged = o.robinhoodEarn === true || isRobinhoodEarnProductFlag(o.robinhoodEarn) || isRobinhoodEarnProductFlag(o.product) || isRobinhoodEarnQuery(String(o.query ?? o.vaultName ?? ""));
|
|
1389
|
+
if (!flagged) return;
|
|
1390
|
+
const chainRaw = o.chainId;
|
|
1391
|
+
const chainId = chainRaw == null || chainRaw === "" ? ROBINHOOD_CHAIN_ID : typeof chainRaw === "number" ? chainRaw : Number.parseInt(String(chainRaw), chainRaw.toString().startsWith("0x") ? 16 : 10);
|
|
1392
|
+
if (!Number.isFinite(chainId) || chainId !== ROBINHOOD_CHAIN_ID) return;
|
|
1393
|
+
if (chainRaw == null || chainRaw === "") o.chainId = ROBINHOOD_CHAIN_ID;
|
|
1394
|
+
const vaultAddr = o.vaultAddress ?? o.vault ?? ROBINHOOD_EARN_VAULT_ADDRESS;
|
|
1395
|
+
o.vaultAddress = vaultAddr;
|
|
1396
|
+
o.vault = vaultAddr;
|
|
1397
|
+
const underlyingAddr = o.underlyingAddress ?? o.underlying ?? ROBINHOOD_EARN_USDG_ADDRESS;
|
|
1398
|
+
o.underlyingAddress = underlyingAddr;
|
|
1399
|
+
o.underlying = underlyingAddr;
|
|
1400
|
+
o.vaultName = o.vaultName ?? ROBINHOOD_EARN_VAULT_NAME;
|
|
1401
|
+
o.vaultSymbol = o.vaultSymbol ?? ROBINHOOD_EARN_VAULT_SYMBOL;
|
|
1402
|
+
}
|
|
1403
|
+
|
|
1404
|
+
// src/agent/schemas/morpho.ts
|
|
1357
1405
|
var morphoExposureRowSchema = zod.z.object({
|
|
1358
1406
|
label: zod.z.string(),
|
|
1359
1407
|
allocatedUsdLabel: zod.z.string(),
|
|
@@ -1362,6 +1410,7 @@ var morphoExposureRowSchema = zod.z.object({
|
|
|
1362
1410
|
function preprocessMorphoVaultDepositInput(raw) {
|
|
1363
1411
|
if (!raw || typeof raw !== "object" || Array.isArray(raw)) return raw;
|
|
1364
1412
|
const o = { ...raw };
|
|
1413
|
+
applyRobinhoodEarnMultisignDefaults(o);
|
|
1365
1414
|
const vaultAddr = o.vaultAddress ?? o.vault;
|
|
1366
1415
|
if (vaultAddr != null) {
|
|
1367
1416
|
o.vaultAddress = vaultAddr;
|
|
@@ -1384,6 +1433,7 @@ function preprocessMorphoVaultDepositInput(raw) {
|
|
|
1384
1433
|
function preprocessMorphoVaultWithdrawInput(raw) {
|
|
1385
1434
|
if (!raw || typeof raw !== "object" || Array.isArray(raw)) return raw;
|
|
1386
1435
|
const o = { ...raw };
|
|
1436
|
+
applyRobinhoodEarnMultisignDefaults(o);
|
|
1387
1437
|
const vaultAddr = o.vaultAddress ?? o.vault;
|
|
1388
1438
|
if (vaultAddr != null) {
|
|
1389
1439
|
o.vaultAddress = vaultAddr;
|
|
@@ -1401,7 +1451,9 @@ function preprocessMorphoVaultWithdrawInput(raw) {
|
|
|
1401
1451
|
var mcpMorphoFetchEarnVaultsInputSchema = zod.z.object({
|
|
1402
1452
|
chainId: agentEvmChainIdSchema,
|
|
1403
1453
|
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."),
|
|
1404
|
-
query: zod.z.string().trim().min(1).optional().describe(
|
|
1454
|
+
query: zod.z.string().trim().min(1).optional().describe(
|
|
1455
|
+
'Case-insensitive filter on vault name, symbol, address, or underlying symbol (e.g. Steakhouse, bbqUSDC). On chain 4663, "robinhood earn" resolves to Steakhouse USDG (Robinhood Earn vault).'
|
|
1456
|
+
),
|
|
1405
1457
|
limit: agentCoercedOptionalIntSchema(zod.z.number().int().min(1).max(200)).describe("Max rows (default 50).")
|
|
1406
1458
|
});
|
|
1407
1459
|
var mcpMorphoFetchEarnVaultsOutputSchema = zod.z.object({
|
|
@@ -1646,6 +1698,79 @@ var mcpEulerV2CollateralWithdrawInputSchema = mcpMultisignInput({
|
|
|
1646
1698
|
collateralAsset: evmAddressSchema,
|
|
1647
1699
|
amountHuman: zod.z.string().min(1)
|
|
1648
1700
|
});
|
|
1701
|
+
var mcpVeniceStakeVvvInputSchema = mcpMultisignInput({
|
|
1702
|
+
amountHuman: zod.z.string().min(1)
|
|
1703
|
+
});
|
|
1704
|
+
var mcpVeniceInitiateUnstakeSvvvInputSchema = mcpMultisignInput({
|
|
1705
|
+
amountHuman: zod.z.string().min(1)
|
|
1706
|
+
});
|
|
1707
|
+
var mcpVeniceCompleteUnstakeSvvvInputSchema = mcpMultisignInput({});
|
|
1708
|
+
var mcpVeniceMintDiemInputSchema = mcpMultisignInput({
|
|
1709
|
+
svvvLockAmountHuman: zod.z.string().min(1),
|
|
1710
|
+
slippageBps: zod.z.number().int().min(0).max(1e4).optional()
|
|
1711
|
+
});
|
|
1712
|
+
var mcpVeniceBurnDiemInputSchema = mcpMultisignInput({
|
|
1713
|
+
amountHuman: zod.z.string().min(1)
|
|
1714
|
+
});
|
|
1715
|
+
var mcpVeniceStakeDiemInputSchema = mcpMultisignInput({
|
|
1716
|
+
amountHuman: zod.z.string().min(1)
|
|
1717
|
+
});
|
|
1718
|
+
var mcpVeniceInitiateUnstakeDiemInputSchema = mcpMultisignInput({
|
|
1719
|
+
amountHuman: zod.z.string().min(1)
|
|
1720
|
+
});
|
|
1721
|
+
var mcpVeniceCompleteUnstakeDiemInputSchema = mcpMultisignInput({});
|
|
1722
|
+
var mcpVeniceListModelsInputSchema = zod.z.object({
|
|
1723
|
+
type: zod.z.string().optional().describe("Model type filter: text, image, video, all, etc."),
|
|
1724
|
+
apiKey: zod.z.string().min(1).optional().describe("Injected from VENICE_API_KEY node Variable \u2014 do not pass")
|
|
1725
|
+
});
|
|
1726
|
+
var mcpVeniceReadStakingStateInputSchema = zod.z.object({
|
|
1727
|
+
rpcUrl: zod.z.string().min(1),
|
|
1728
|
+
executorAddress: evmAddressSchema,
|
|
1729
|
+
chainId: agentEvmChainIdSchema.optional().describe("Default 8453 (Base)")
|
|
1730
|
+
});
|
|
1731
|
+
var mcpVeniceReadMintDiemPreviewInputSchema = zod.z.object({
|
|
1732
|
+
rpcUrl: zod.z.string().min(1),
|
|
1733
|
+
svvvLockAmountHuman: zod.z.string().min(1)
|
|
1734
|
+
});
|
|
1735
|
+
var mcpVeniceListModelsOutputSchema = zod.z.object({
|
|
1736
|
+
type: zod.z.string(),
|
|
1737
|
+
count: zod.z.number(),
|
|
1738
|
+
models: zod.z.array(
|
|
1739
|
+
zod.z.object({
|
|
1740
|
+
id: zod.z.string(),
|
|
1741
|
+
type: zod.z.string().optional(),
|
|
1742
|
+
offline: zod.z.boolean().optional(),
|
|
1743
|
+
beta: zod.z.boolean().optional()
|
|
1744
|
+
})
|
|
1745
|
+
)
|
|
1746
|
+
});
|
|
1747
|
+
var mcpVeniceReadStakingStateOutputSchema = zod.z.object({
|
|
1748
|
+
chainId: zod.z.number(),
|
|
1749
|
+
wallet: zod.z.string(),
|
|
1750
|
+
balances: zod.z.object({
|
|
1751
|
+
vvvWei: zod.z.string(),
|
|
1752
|
+
svvvWei: zod.z.string(),
|
|
1753
|
+
diemWei: zod.z.string(),
|
|
1754
|
+
diemStakedWei: zod.z.string()
|
|
1755
|
+
}),
|
|
1756
|
+
diemCooldown: zod.z.object({
|
|
1757
|
+
pendingUnstakeWei: zod.z.string(),
|
|
1758
|
+
unlockAtSec: zod.z.string(),
|
|
1759
|
+
cooldownDurationSec: zod.z.string()
|
|
1760
|
+
}),
|
|
1761
|
+
svvvCooldownDurationSec: zod.z.string(),
|
|
1762
|
+
mintRateSvvcPerDiem: zod.z.number(),
|
|
1763
|
+
diemTotalSupplyWei: zod.z.string(),
|
|
1764
|
+
estimatedApiCreditUsdPerDay: zod.z.string()
|
|
1765
|
+
});
|
|
1766
|
+
var mcpVeniceReadMintDiemPreviewOutputSchema = zod.z.object({
|
|
1767
|
+
svvvLockAmountHuman: zod.z.string(),
|
|
1768
|
+
svvvLockWei: zod.z.string(),
|
|
1769
|
+
mintRateSvvcPerDiem: zod.z.number(),
|
|
1770
|
+
expectedDiemWei: zod.z.string(),
|
|
1771
|
+
diemTotalSupplyWei: zod.z.string(),
|
|
1772
|
+
stakingContract: zod.z.string()
|
|
1773
|
+
});
|
|
1649
1774
|
var mcpMorphoVaultDepositInputSchema = withMultisignKeySourceRefine(
|
|
1650
1775
|
zod.z.preprocess(
|
|
1651
1776
|
preprocessMorphoVaultDepositInput,
|
|
@@ -1659,6 +1784,9 @@ var mcpMorphoVaultDepositInputSchema = withMultisignKeySourceRefine(
|
|
|
1659
1784
|
amountHuman: zod.z.string().min(1).describe('Human-readable deposit amount (e.g. "1000" USDC).'),
|
|
1660
1785
|
vaultName: zod.z.string().optional().describe("Optional vaultName from fetch row (fills purposeText when omitted)."),
|
|
1661
1786
|
vaultSymbol: zod.z.string().optional().describe("Optional vaultSymbol from fetch row."),
|
|
1787
|
+
robinhoodEarn: agentOptionalBooleanSchema().describe(
|
|
1788
|
+
"When true on chain 4663, pre-fills Robinhood Earn vault (Steakhouse USDG / steakUSDG) and USDG underlying."
|
|
1789
|
+
),
|
|
1662
1790
|
isNativeIn: agentOptionalBooleanSchema()
|
|
1663
1791
|
})
|
|
1664
1792
|
)
|
|
@@ -1672,7 +1800,10 @@ var mcpMorphoVaultWithdrawInputSchema = withMultisignKeySourceRefine(
|
|
|
1672
1800
|
),
|
|
1673
1801
|
amountHuman: zod.z.string().min(1),
|
|
1674
1802
|
vaultName: zod.z.string().optional(),
|
|
1675
|
-
vaultSymbol: zod.z.string().optional()
|
|
1803
|
+
vaultSymbol: zod.z.string().optional(),
|
|
1804
|
+
robinhoodEarn: agentOptionalBooleanSchema().describe(
|
|
1805
|
+
"When true on chain 4663, pre-fills Robinhood Earn vault (Steakhouse USDG / steakUSDG)."
|
|
1806
|
+
)
|
|
1676
1807
|
})
|
|
1677
1808
|
)
|
|
1678
1809
|
);
|
|
@@ -2646,6 +2777,98 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
|
|
|
2646
2777
|
handler: { importPath: "protocols/evm/ethena", exportName: "buildEvmMultisignBodyEthenaUnstakeClaim" },
|
|
2647
2778
|
inputZod: mcpEthenaClaimInputSchema
|
|
2648
2779
|
}),
|
|
2780
|
+
defineProtocolMcpTool({
|
|
2781
|
+
name: "ctm_venice_build_stake_vvv_multisign",
|
|
2782
|
+
actionId: "venice.stake-vvv",
|
|
2783
|
+
protocolId: "venice",
|
|
2784
|
+
chainCategory: "evm",
|
|
2785
|
+
description: "Build batch: VVV approve + stake \u2192 sVVV on Base.",
|
|
2786
|
+
prerequisites: ["keyGen", "executorAddress", "Base RPC (chainId 8453)"],
|
|
2787
|
+
handler: { importPath: "protocols/evm/venice", exportName: "buildEvmMultisignBodyVeniceStakeVvv" },
|
|
2788
|
+
inputZod: mcpVeniceStakeVvvInputSchema
|
|
2789
|
+
}),
|
|
2790
|
+
defineProtocolMcpTool({
|
|
2791
|
+
name: "ctm_venice_build_initiate_unstake_svvv_multisign",
|
|
2792
|
+
actionId: "venice.initiate-unstake-svvv",
|
|
2793
|
+
protocolId: "venice",
|
|
2794
|
+
chainCategory: "evm",
|
|
2795
|
+
description: "Start sVVV unstake (7-day cooldown) on Base.",
|
|
2796
|
+
prerequisites: ["keyGen", "executorAddress", "Base RPC"],
|
|
2797
|
+
handler: {
|
|
2798
|
+
importPath: "protocols/evm/venice",
|
|
2799
|
+
exportName: "buildEvmMultisignBodyVeniceInitiateUnstakeSvvv"
|
|
2800
|
+
},
|
|
2801
|
+
inputZod: mcpVeniceInitiateUnstakeSvvvInputSchema
|
|
2802
|
+
}),
|
|
2803
|
+
defineProtocolMcpTool({
|
|
2804
|
+
name: "ctm_venice_build_complete_unstake_svvv_multisign",
|
|
2805
|
+
actionId: "venice.complete-unstake-svvv",
|
|
2806
|
+
protocolId: "venice",
|
|
2807
|
+
chainCategory: "evm",
|
|
2808
|
+
description: "Claim VVV after sVVV unstake cooldown on Base.",
|
|
2809
|
+
prerequisites: ["keyGen", "executorAddress", "Base RPC", "pending sVVV unstake"],
|
|
2810
|
+
handler: {
|
|
2811
|
+
importPath: "protocols/evm/venice",
|
|
2812
|
+
exportName: "buildEvmMultisignBodyVeniceCompleteUnstakeSvvv"
|
|
2813
|
+
},
|
|
2814
|
+
inputZod: mcpVeniceCompleteUnstakeSvvvInputSchema
|
|
2815
|
+
}),
|
|
2816
|
+
defineProtocolMcpTool({
|
|
2817
|
+
name: "ctm_venice_build_mint_diem_multisign",
|
|
2818
|
+
actionId: "venice.mint-diem",
|
|
2819
|
+
protocolId: "venice",
|
|
2820
|
+
chainCategory: "evm",
|
|
2821
|
+
description: "Lock sVVV and mint DIEM on Base (preview with ctm_venice_read_mint_diem_preview).",
|
|
2822
|
+
prerequisites: ["keyGen", "executorAddress", "Base RPC", "sVVV balance"],
|
|
2823
|
+
handler: { importPath: "protocols/evm/venice", exportName: "buildEvmMultisignBodyVeniceMintDiem" },
|
|
2824
|
+
inputZod: mcpVeniceMintDiemInputSchema
|
|
2825
|
+
}),
|
|
2826
|
+
defineProtocolMcpTool({
|
|
2827
|
+
name: "ctm_venice_build_burn_diem_multisign",
|
|
2828
|
+
actionId: "venice.burn-diem",
|
|
2829
|
+
protocolId: "venice",
|
|
2830
|
+
chainCategory: "evm",
|
|
2831
|
+
description: "Burn DIEM to unlock locked sVVV on Base.",
|
|
2832
|
+
prerequisites: ["keyGen", "executorAddress", "Base RPC", "DIEM balance"],
|
|
2833
|
+
handler: { importPath: "protocols/evm/venice", exportName: "buildEvmMultisignBodyVeniceBurnDiem" },
|
|
2834
|
+
inputZod: mcpVeniceBurnDiemInputSchema
|
|
2835
|
+
}),
|
|
2836
|
+
defineProtocolMcpTool({
|
|
2837
|
+
name: "ctm_venice_build_stake_diem_multisign",
|
|
2838
|
+
actionId: "venice.stake-diem",
|
|
2839
|
+
protocolId: "venice",
|
|
2840
|
+
chainCategory: "evm",
|
|
2841
|
+
description: "Stake DIEM for Venice API credits ($1/day per DIEM) on Base.",
|
|
2842
|
+
prerequisites: ["keyGen", "executorAddress", "Base RPC", "DIEM balance"],
|
|
2843
|
+
handler: { importPath: "protocols/evm/venice", exportName: "buildEvmMultisignBodyVeniceStakeDiem" },
|
|
2844
|
+
inputZod: mcpVeniceStakeDiemInputSchema
|
|
2845
|
+
}),
|
|
2846
|
+
defineProtocolMcpTool({
|
|
2847
|
+
name: "ctm_venice_build_initiate_unstake_diem_multisign",
|
|
2848
|
+
actionId: "venice.initiate-unstake-diem",
|
|
2849
|
+
protocolId: "venice",
|
|
2850
|
+
chainCategory: "evm",
|
|
2851
|
+
description: "Start DIEM unstake (1-day cooldown) on Base.",
|
|
2852
|
+
prerequisites: ["keyGen", "executorAddress", "Base RPC", "staked DIEM"],
|
|
2853
|
+
handler: {
|
|
2854
|
+
importPath: "protocols/evm/venice",
|
|
2855
|
+
exportName: "buildEvmMultisignBodyVeniceInitiateUnstakeDiem"
|
|
2856
|
+
},
|
|
2857
|
+
inputZod: mcpVeniceInitiateUnstakeDiemInputSchema
|
|
2858
|
+
}),
|
|
2859
|
+
defineProtocolMcpTool({
|
|
2860
|
+
name: "ctm_venice_build_complete_unstake_diem_multisign",
|
|
2861
|
+
actionId: "venice.complete-unstake-diem",
|
|
2862
|
+
protocolId: "venice",
|
|
2863
|
+
chainCategory: "evm",
|
|
2864
|
+
description: "Claim DIEM after staked-DIEM unstake cooldown on Base.",
|
|
2865
|
+
prerequisites: ["keyGen", "executorAddress", "Base RPC", "pending DIEM unstake"],
|
|
2866
|
+
handler: {
|
|
2867
|
+
importPath: "protocols/evm/venice",
|
|
2868
|
+
exportName: "buildEvmMultisignBodyVeniceCompleteUnstakeDiem"
|
|
2869
|
+
},
|
|
2870
|
+
inputZod: mcpVeniceCompleteUnstakeDiemInputSchema
|
|
2871
|
+
}),
|
|
2649
2872
|
defineProtocolMcpTool({
|
|
2650
2873
|
name: "ctm_maple_build_deposit_multisign",
|
|
2651
2874
|
actionId: "maple-syrup.deposit",
|
|
@@ -2847,11 +3070,11 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
|
|
|
2847
3070
|
actionId: "morpho.vault-deposit",
|
|
2848
3071
|
protocolId: "morpho",
|
|
2849
3072
|
chainCategory: "evm",
|
|
2850
|
-
description: "Build Morpho vault deposit batch (wrap/approve + deposit). Works with listed V1 and V2 vaults.",
|
|
3073
|
+
description: "Build Morpho vault deposit batch (wrap/approve + deposit). Works with listed V1 and V2 vaults. On chain 4663, robinhoodEarn: true pre-fills Robinhood Earn (Steakhouse USDG).",
|
|
2851
3074
|
prerequisites: [
|
|
2852
3075
|
"keyGenId",
|
|
2853
3076
|
"chainId",
|
|
2854
|
-
"vaultAddress + underlyingAddress from ctm_morpho_fetch_earn_vaults",
|
|
3077
|
+
"vaultAddress + underlyingAddress from ctm_morpho_fetch_earn_vaults (or robinhoodEarn: true on 4663)",
|
|
2855
3078
|
"amountHuman"
|
|
2856
3079
|
],
|
|
2857
3080
|
handler: { importPath: "protocols/evm/morpho", exportName: "buildEvmMultisignBodyMorphoVaultDepositBatch" },
|
|
@@ -2862,11 +3085,11 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
|
|
|
2862
3085
|
actionId: "morpho.vault-withdraw",
|
|
2863
3086
|
protocolId: "morpho",
|
|
2864
3087
|
chainCategory: "evm",
|
|
2865
|
-
description: "Build Morpho vault withdraw batch. Works with listed V1 and V2 vaults.",
|
|
3088
|
+
description: "Build Morpho vault withdraw batch. Works with listed V1 and V2 vaults. On chain 4663, robinhoodEarn: true pre-fills Robinhood Earn (Steakhouse USDG).",
|
|
2866
3089
|
prerequisites: [
|
|
2867
3090
|
"keyGenId",
|
|
2868
3091
|
"chainId",
|
|
2869
|
-
"vaultAddress from ctm_morpho_fetch_earn_vaults or user positions",
|
|
3092
|
+
"vaultAddress from ctm_morpho_fetch_earn_vaults or user positions (or robinhoodEarn: true on 4663)",
|
|
2870
3093
|
"amountHuman"
|
|
2871
3094
|
],
|
|
2872
3095
|
handler: { importPath: "protocols/evm/morpho", exportName: "buildEvmMultisignBodyMorphoVaultWithdraw" },
|
|
@@ -4052,12 +4275,52 @@ var CORE_MCP_TOOL_DEFINITIONS = [
|
|
|
4052
4275
|
inputZod: mcpCctpFetchTransferStatusInputSchema,
|
|
4053
4276
|
outputZod: mcpCctpFetchTransferStatusOutputSchema
|
|
4054
4277
|
}),
|
|
4278
|
+
defineMcpTool({
|
|
4279
|
+
name: "ctm_venice_list_models",
|
|
4280
|
+
actionId: "venice.list-models",
|
|
4281
|
+
protocolId: "venice",
|
|
4282
|
+
chainCategory: "evm",
|
|
4283
|
+
description: "Venice AI model catalog (GET /models). Optional type filter (text, image, video, all). Requires VENICE_API_KEY in node Variables (server injects \u2014 do not pass apiKey).",
|
|
4284
|
+
prerequisites: ["VENICE_API_KEY in node Variables"],
|
|
4285
|
+
followUp: [],
|
|
4286
|
+
handler: { importPath: "protocols/evm/venice", exportName: "veniceListModelsSummary" },
|
|
4287
|
+
inputZod: mcpVeniceListModelsInputSchema,
|
|
4288
|
+
outputZod: mcpVeniceListModelsOutputSchema
|
|
4289
|
+
}),
|
|
4290
|
+
defineMcpTool({
|
|
4291
|
+
name: "ctm_venice_read_staking_state",
|
|
4292
|
+
actionId: "venice.read-staking-state",
|
|
4293
|
+
protocolId: "venice",
|
|
4294
|
+
chainCategory: "evm",
|
|
4295
|
+
description: "Read VVV/sVVV/DIEM wallet balances, staked DIEM, cooldown fields, mint rate, and estimated API credit on Base.",
|
|
4296
|
+
prerequisites: ["rpcUrl", "executorAddress", "chainId 8453"],
|
|
4297
|
+
followUp: [
|
|
4298
|
+
"ctm_venice_read_mint_diem_preview",
|
|
4299
|
+
"ctm_venice_build_stake_vvv_multisign",
|
|
4300
|
+
"ctm_venice_build_stake_diem_multisign"
|
|
4301
|
+
],
|
|
4302
|
+
handler: { importPath: "protocols/evm/venice", exportName: "veniceReadStakingStateSummary" },
|
|
4303
|
+
inputZod: mcpVeniceReadStakingStateInputSchema,
|
|
4304
|
+
outputZod: mcpVeniceReadStakingStateOutputSchema
|
|
4305
|
+
}),
|
|
4306
|
+
defineMcpTool({
|
|
4307
|
+
name: "ctm_venice_read_mint_diem_preview",
|
|
4308
|
+
actionId: "venice.read-mint-diem-preview",
|
|
4309
|
+
protocolId: "venice",
|
|
4310
|
+
chainCategory: "evm",
|
|
4311
|
+
description: "Preview DIEM mint rate and expected DIEM output for locking sVVV on Base.",
|
|
4312
|
+
prerequisites: ["rpcUrl", "svvvLockAmountHuman"],
|
|
4313
|
+
followUp: ["ctm_venice_build_mint_diem_multisign"],
|
|
4314
|
+
handler: { importPath: "protocols/evm/venice", exportName: "veniceReadMintDiemPreviewSummary" },
|
|
4315
|
+
inputZod: mcpVeniceReadMintDiemPreviewInputSchema,
|
|
4316
|
+
outputZod: mcpVeniceReadMintDiemPreviewOutputSchema
|
|
4317
|
+
}),
|
|
4055
4318
|
defineMcpTool({
|
|
4056
4319
|
name: "ctm_morpho_fetch_earn_vaults",
|
|
4057
4320
|
actionId: "morpho.fetch-earn-vaults",
|
|
4058
4321
|
protocolId: "morpho",
|
|
4059
4322
|
chainCategory: "evm",
|
|
4060
|
-
description:
|
|
4323
|
+
description: 'Morpho-listed earn vaults (V1 + V2 unified). Filter by deposit asset symbol/address and/or case-insensitive vault name search. On chain 4663, query "robinhood earn" resolves to Steakhouse USDG (Robinhood Earn). Returns vaultAddress for deposit/withdraw multisign tools.',
|
|
4061
4324
|
prerequisites: ["chainId"],
|
|
4062
4325
|
followUp: [
|
|
4063
4326
|
"ctm_morpho_build_vault_deposit_multisign",
|
|
@@ -5335,6 +5598,97 @@ var circleCctpProtocolModule = {
|
|
|
5335
5598
|
]
|
|
5336
5599
|
};
|
|
5337
5600
|
registerProtocolModule(circleCctpProtocolModule);
|
|
5601
|
+
var VENICE_PROTOCOL_ID = "venice";
|
|
5602
|
+
var VENICE_BASE_CHAIN_ID = 8453;
|
|
5603
|
+
var VVV_BASE = "0xacfE6019Ed1A7Dc6f7B508C02d1b04ec88cC21bf";
|
|
5604
|
+
var DIEM_BASE = "0xF4d97F2da56e8c3098f3a8D538DB630A2606a024";
|
|
5605
|
+
function isVeniceBaseChain(chainId) {
|
|
5606
|
+
return chainId === VENICE_BASE_CHAIN_ID;
|
|
5607
|
+
}
|
|
5608
|
+
|
|
5609
|
+
// src/protocols/evm/venice/index.ts
|
|
5610
|
+
var veniceProtocolModule = {
|
|
5611
|
+
id: VENICE_PROTOCOL_ID,
|
|
5612
|
+
chainCategory: "evm",
|
|
5613
|
+
isChainSupported(ctx) {
|
|
5614
|
+
if (ctx.chainCategory !== "evm") return false;
|
|
5615
|
+
const n = typeof ctx.chainId === "number" ? ctx.chainId : Number.parseInt(String(ctx.chainId), 10);
|
|
5616
|
+
return isVeniceBaseChain(n);
|
|
5617
|
+
},
|
|
5618
|
+
isTokenSupported(token) {
|
|
5619
|
+
return token.category === "evm" && token.kind === "erc20";
|
|
5620
|
+
},
|
|
5621
|
+
actions: [
|
|
5622
|
+
{
|
|
5623
|
+
id: "venice.stake-vvv",
|
|
5624
|
+
protocolId: VENICE_PROTOCOL_ID,
|
|
5625
|
+
chainCategory: "evm",
|
|
5626
|
+
description: "Stake VVV \u2192 sVVV on Base",
|
|
5627
|
+
commonParams: ["keyGen", "purposeText", "useCustomGas"],
|
|
5628
|
+
params: { amountHuman: { type: "string", required: true, description: "VVV amount" } }
|
|
5629
|
+
},
|
|
5630
|
+
{
|
|
5631
|
+
id: "venice.initiate-unstake-svvv",
|
|
5632
|
+
protocolId: VENICE_PROTOCOL_ID,
|
|
5633
|
+
chainCategory: "evm",
|
|
5634
|
+
description: "Start sVVV unstake (7-day cooldown)",
|
|
5635
|
+
commonParams: ["keyGen", "purposeText", "useCustomGas"],
|
|
5636
|
+
params: { amountHuman: { type: "string", required: true, description: "sVVV amount" } }
|
|
5637
|
+
},
|
|
5638
|
+
{
|
|
5639
|
+
id: "venice.complete-unstake-svvv",
|
|
5640
|
+
protocolId: VENICE_PROTOCOL_ID,
|
|
5641
|
+
chainCategory: "evm",
|
|
5642
|
+
description: "Claim VVV after sVVV unstake cooldown",
|
|
5643
|
+
commonParams: ["keyGen", "purposeText", "useCustomGas"],
|
|
5644
|
+
params: {}
|
|
5645
|
+
},
|
|
5646
|
+
{
|
|
5647
|
+
id: "venice.mint-diem",
|
|
5648
|
+
protocolId: VENICE_PROTOCOL_ID,
|
|
5649
|
+
chainCategory: "evm",
|
|
5650
|
+
description: "Lock sVVV and mint DIEM",
|
|
5651
|
+
commonParams: ["keyGen", "purposeText", "useCustomGas"],
|
|
5652
|
+
params: {
|
|
5653
|
+
svvvLockAmountHuman: { type: "string", required: true, description: "sVVV to lock" },
|
|
5654
|
+
slippageBps: { type: "number", required: false, description: "Min DIEM slippage bps (default 50)" }
|
|
5655
|
+
}
|
|
5656
|
+
},
|
|
5657
|
+
{
|
|
5658
|
+
id: "venice.burn-diem",
|
|
5659
|
+
protocolId: VENICE_PROTOCOL_ID,
|
|
5660
|
+
chainCategory: "evm",
|
|
5661
|
+
description: "Burn DIEM to unlock locked sVVV",
|
|
5662
|
+
commonParams: ["keyGen", "purposeText", "useCustomGas"],
|
|
5663
|
+
params: { amountHuman: { type: "string", required: true, description: "DIEM to burn" } }
|
|
5664
|
+
},
|
|
5665
|
+
{
|
|
5666
|
+
id: "venice.stake-diem",
|
|
5667
|
+
protocolId: VENICE_PROTOCOL_ID,
|
|
5668
|
+
chainCategory: "evm",
|
|
5669
|
+
description: "Stake DIEM for Venice API credits ($1/day per DIEM)",
|
|
5670
|
+
commonParams: ["keyGen", "purposeText", "useCustomGas"],
|
|
5671
|
+
params: { amountHuman: { type: "string", required: true, description: "DIEM amount" } }
|
|
5672
|
+
},
|
|
5673
|
+
{
|
|
5674
|
+
id: "venice.initiate-unstake-diem",
|
|
5675
|
+
protocolId: VENICE_PROTOCOL_ID,
|
|
5676
|
+
chainCategory: "evm",
|
|
5677
|
+
description: "Start DIEM unstake (1-day cooldown)",
|
|
5678
|
+
commonParams: ["keyGen", "purposeText", "useCustomGas"],
|
|
5679
|
+
params: { amountHuman: { type: "string", required: true, description: "Staked DIEM amount" } }
|
|
5680
|
+
},
|
|
5681
|
+
{
|
|
5682
|
+
id: "venice.complete-unstake-diem",
|
|
5683
|
+
protocolId: VENICE_PROTOCOL_ID,
|
|
5684
|
+
chainCategory: "evm",
|
|
5685
|
+
description: "Claim DIEM after unstake cooldown",
|
|
5686
|
+
commonParams: ["keyGen", "purposeText", "useCustomGas"],
|
|
5687
|
+
params: {}
|
|
5688
|
+
}
|
|
5689
|
+
]
|
|
5690
|
+
};
|
|
5691
|
+
registerProtocolModule(veniceProtocolModule);
|
|
5338
5692
|
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");
|
|
5339
5693
|
var SKILL_PROTOCOL_IDS = [
|
|
5340
5694
|
"aave-v4",
|
|
@@ -5582,7 +5936,7 @@ var PROTOCOL_SUPPORT_ADVISORS = {
|
|
|
5582
5936
|
}));
|
|
5583
5937
|
return {
|
|
5584
5938
|
tokens,
|
|
5585
|
-
notes: "Morpho vault assets and Blue market loan/collateral tokens from api.morpho.org."
|
|
5939
|
+
notes: chainId === ROBINHOOD_CHAIN_ID ? 'Morpho vault assets on Robinhood Chain. Robinhood Earn USDG yield uses Steakhouse USDG (steakUSDG) \u2014 query "robinhood earn" or robinhoodEarn: true on deposit multisign; not Arcus collateral.' : "Morpho vault assets and Blue market loan/collateral tokens from api.morpho.org."
|
|
5586
5940
|
};
|
|
5587
5941
|
},
|
|
5588
5942
|
async isTokenSupported(chainId, address) {
|
|
@@ -5669,6 +6023,28 @@ var PROTOCOL_SUPPORT_ADVISORS = {
|
|
|
5669
6023
|
};
|
|
5670
6024
|
}
|
|
5671
6025
|
}),
|
|
6026
|
+
[VENICE_PROTOCOL_ID]: advisor(VENICE_PROTOCOL_ID, "fixed_addresses", {
|
|
6027
|
+
async supportedChainIds() {
|
|
6028
|
+
return [VENICE_BASE_CHAIN_ID];
|
|
6029
|
+
},
|
|
6030
|
+
async supportedTokens() {
|
|
6031
|
+
return {
|
|
6032
|
+
tokens: [
|
|
6033
|
+
{ address: VVV_BASE, symbol: "VVV", roles: ["staking_input"] },
|
|
6034
|
+
{ address: DIEM_BASE, symbol: "DIEM", roles: ["api_credit"] }
|
|
6035
|
+
],
|
|
6036
|
+
notes: "Venice VVV/sVVV/DIEM staking on Base (8453). Stake DIEM for $1/day Venice API credit per token. Never send tokens directly to contract addresses."
|
|
6037
|
+
};
|
|
6038
|
+
},
|
|
6039
|
+
async isTokenSupported(_chainId, address) {
|
|
6040
|
+
try {
|
|
6041
|
+
const normalized = viem.getAddress(address).toLowerCase();
|
|
6042
|
+
return normalized === viem.getAddress(VVV_BASE).toLowerCase() || normalized === viem.getAddress(DIEM_BASE).toLowerCase();
|
|
6043
|
+
} catch {
|
|
6044
|
+
return false;
|
|
6045
|
+
}
|
|
6046
|
+
}
|
|
6047
|
+
}),
|
|
5672
6048
|
arcus: advisor("arcus", "api_underlyings", {
|
|
5673
6049
|
async supportedChainIds() {
|
|
5674
6050
|
return [...ARCUS_SUPPORTED_CHAIN_IDS];
|
|
@@ -5702,6 +6078,7 @@ registerProtocolModule(hyperliquidProtocolModule);
|
|
|
5702
6078
|
registerProtocolModule(arcusProtocolModule);
|
|
5703
6079
|
registerProtocolModule(morphoProtocolModule);
|
|
5704
6080
|
registerProtocolModule(circleCctpProtocolModule);
|
|
6081
|
+
registerProtocolModule(veniceProtocolModule);
|
|
5705
6082
|
function getAgentCatalog() {
|
|
5706
6083
|
return {
|
|
5707
6084
|
protocols: getProtocolModules(),
|
|
@@ -5723,6 +6100,7 @@ function getAgentCatalog() {
|
|
|
5723
6100
|
arcus: arcusProtocolModule,
|
|
5724
6101
|
morpho: morphoProtocolModule,
|
|
5725
6102
|
circleCctp: circleCctpProtocolModule,
|
|
6103
|
+
venice: veniceProtocolModule,
|
|
5726
6104
|
/** Prefer getAgentCatalogForMcp() or getMcpToolDefinitions() for MCP servers. */
|
|
5727
6105
|
mcp: getAgentCatalogForMcp()
|
|
5728
6106
|
};
|
|
@@ -5929,6 +6307,20 @@ exports.mcpUniswapV4RegisterPositionFromMintTxInputSchema = mcpUniswapV4Register
|
|
|
5929
6307
|
exports.mcpUniswapV4RegisterPositionFromMintTxOutputSchema = mcpUniswapV4RegisterPositionFromMintTxOutputSchema;
|
|
5930
6308
|
exports.mcpUniswapV4RegisterPositionNftInputSchema = mcpUniswapV4RegisterPositionNftInputSchema;
|
|
5931
6309
|
exports.mcpUniswapV4RegisterPositionNftOutputSchema = mcpUniswapV4RegisterPositionNftOutputSchema;
|
|
6310
|
+
exports.mcpVeniceBurnDiemInputSchema = mcpVeniceBurnDiemInputSchema;
|
|
6311
|
+
exports.mcpVeniceCompleteUnstakeDiemInputSchema = mcpVeniceCompleteUnstakeDiemInputSchema;
|
|
6312
|
+
exports.mcpVeniceCompleteUnstakeSvvvInputSchema = mcpVeniceCompleteUnstakeSvvvInputSchema;
|
|
6313
|
+
exports.mcpVeniceInitiateUnstakeDiemInputSchema = mcpVeniceInitiateUnstakeDiemInputSchema;
|
|
6314
|
+
exports.mcpVeniceInitiateUnstakeSvvvInputSchema = mcpVeniceInitiateUnstakeSvvvInputSchema;
|
|
6315
|
+
exports.mcpVeniceListModelsInputSchema = mcpVeniceListModelsInputSchema;
|
|
6316
|
+
exports.mcpVeniceListModelsOutputSchema = mcpVeniceListModelsOutputSchema;
|
|
6317
|
+
exports.mcpVeniceMintDiemInputSchema = mcpVeniceMintDiemInputSchema;
|
|
6318
|
+
exports.mcpVeniceReadMintDiemPreviewInputSchema = mcpVeniceReadMintDiemPreviewInputSchema;
|
|
6319
|
+
exports.mcpVeniceReadMintDiemPreviewOutputSchema = mcpVeniceReadMintDiemPreviewOutputSchema;
|
|
6320
|
+
exports.mcpVeniceReadStakingStateInputSchema = mcpVeniceReadStakingStateInputSchema;
|
|
6321
|
+
exports.mcpVeniceReadStakingStateOutputSchema = mcpVeniceReadStakingStateOutputSchema;
|
|
6322
|
+
exports.mcpVeniceStakeDiemInputSchema = mcpVeniceStakeDiemInputSchema;
|
|
6323
|
+
exports.mcpVeniceStakeVvvInputSchema = mcpVeniceStakeVvvInputSchema;
|
|
5932
6324
|
exports.multisignOutputSchema = multisignOutputSchema;
|
|
5933
6325
|
exports.parseAgentBoolean = parseAgentBoolean;
|
|
5934
6326
|
exports.parseAgentEvmChainId = parseAgentEvmChainId;
|