@continuumdao/ctm-mpc-defi 0.2.35 → 0.2.36

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.
@@ -1095,7 +1095,7 @@ var evmMultisignCommonInputSchema = z.object({
1095
1095
  chainDetail: chainDetailSchema.optional().describe("Server-filled gas row from chain registry when keyGenId is set."),
1096
1096
  customGasChainDetails: z.record(z.unknown()).optional().describe("Snapshot written to extraJSON.customGasChainDetails when useCustomGas is true."),
1097
1097
  expiryDate: z.number().int().positive().optional().describe(
1098
- "Optional Unix seconds (UTC) when the MPC sign request expires. Uniswap V4, GMX, Hyperliquid, Curve DAO, and Aerodrome default to 30 minutes when omitted; other protocols use the node default (7 days)."
1098
+ "Optional Unix seconds (UTC) when the MPC sign request expires. Uniswap V4, GMX, Hyperliquid, Curve DAO, Aerodrome, and Pendle default to 30 minutes when omitted; other protocols use the node default (7 days)."
1099
1099
  )
1100
1100
  });
1101
1101
  function withMultisignKeySourceRefine(schema) {
@@ -3414,6 +3414,193 @@ var mcpEthenaFetchSusdeApyOutputSchema = z.object({
3414
3414
  cooldownDurationSec: z.number().nullable(),
3415
3415
  notes: z.string()
3416
3416
  });
3417
+ var mcpPendleFetchMarketsInputSchema = z.object({
3418
+ chainId: agentEvmChainIdSchema,
3419
+ query: z.string().trim().min(1).optional().describe("Optional shrink filter on name, PT/YT/underlying symbol or address."),
3420
+ pointsOnly: z.boolean().optional().describe("If true, only markets with point campaigns.")
3421
+ });
3422
+ var mcpPendleFetchMarketsOutputSchema = jsonObjectSchema.describe(
3423
+ "{ chainId, markets[] (address, pt, yt, sy, underlying, expiry, impliedApy, tvlUsd, points), notes }. Live markets only, hard cap 100 TVL-ranked."
3424
+ );
3425
+ var mcpPendleFetchPricesInputSchema = z.object({
3426
+ chainId: agentEvmChainIdSchema,
3427
+ ids: z.array(z.string().min(1)).optional().describe("Asset ids (chainId-0x\u2026). Omit to price the current live listing."),
3428
+ query: z.string().trim().min(1).optional()
3429
+ });
3430
+ var mcpPendleFetchPricesOutputSchema = jsonObjectSchema.describe(
3431
+ "{ chainId, prices[] ({ id, usd }), notes }"
3432
+ );
3433
+ var mcpPendleSearchAssetsInputSchema = z.object({
3434
+ chainId: agentEvmChainIdSchema,
3435
+ query: z.string().trim().min(1).describe("Ticker, name, 0x address, or chainId-0x asset id.")
3436
+ });
3437
+ var mcpPendleSearchAssetsOutputSchema = jsonObjectSchema.describe(
3438
+ "{ chainId, results[] (live PT/YT/SY/market + expiry, liquidity, points), notes }"
3439
+ );
3440
+ var mcpPendleFetchPositionsInputSchema = z.object({
3441
+ user: evmAddressSchema.describe("KeyGen / wallet to list Pendle LP for."),
3442
+ chainId: agentEvmChainIdSchema.optional().describe("If set, only this chain. Omit for all Core chains."),
3443
+ filterUsd: z.number().min(0).optional().describe("Drop holdings below this USD valuation. Omit to keep dust.")
3444
+ });
3445
+ var mcpPendleFetchPositionsOutputSchema = jsonObjectSchema.describe(
3446
+ "{ user, chainId, lp[] (market, name, expiry, matured, lpAmountHuman, lpUsd), notes }. Includes matured. Not the node token list."
3447
+ );
3448
+ var mcpPendleFetchMerkleRewardsInputSchema = z.object({
3449
+ user: evmAddressSchema.describe("Wallet to list off-chain airdrop rows for (informational; no claim).")
3450
+ });
3451
+ var mcpPendleFetchMerkleRewardsOutputSchema = jsonObjectSchema.describe(
3452
+ "{ user, claimableRewards[], claimedRewards[], notes }. List only \u2014 cannot build a claim from these rows."
3453
+ );
3454
+ var mcpPendleQuoteSwapInputSchema = z.object({
3455
+ chainId: agentEvmChainIdSchema,
3456
+ rpcUrl: z.string().min(1).optional(),
3457
+ tokenIn: z.string().min(1).describe("Underlying, PT, or YT (0xeeee / 0x0 = native)."),
3458
+ tokenOut: z.string().min(1),
3459
+ amountHuman: z.string().min(1),
3460
+ slippagePercent: z.number().gt(0).lt(100),
3461
+ receiver: evmAddressSchema.optional(),
3462
+ enableAggregator: z.boolean().optional(),
3463
+ tokenInDecimals: z.number().int().min(0).max(18).optional()
3464
+ });
3465
+ var mcpPendleQuoteOutputSchema = jsonObjectSchema.describe(
3466
+ "Hosted SDK convert quote: action, outputs, priceImpact, impliedApy, requiredApprovals, tx (do not hardcode tx.to)."
3467
+ );
3468
+ var mcpPendleQuoteMintPyInputSchema = z.object({
3469
+ chainId: agentEvmChainIdSchema,
3470
+ rpcUrl: z.string().min(1).optional(),
3471
+ tokenIn: z.string().min(1),
3472
+ pt: evmAddressSchema,
3473
+ yt: evmAddressSchema,
3474
+ amountHuman: z.string().min(1),
3475
+ slippagePercent: z.number().gt(0).lt(100),
3476
+ receiver: evmAddressSchema.optional()
3477
+ });
3478
+ var mcpPendleQuoteRedeemPyInputSchema = z.object({
3479
+ chainId: agentEvmChainIdSchema,
3480
+ rpcUrl: z.string().min(1).optional(),
3481
+ pt: evmAddressSchema,
3482
+ yt: evmAddressSchema,
3483
+ tokenOut: z.string().min(1),
3484
+ amountPtHuman: z.string().min(1),
3485
+ amountYtHuman: z.string().min(1).optional(),
3486
+ slippagePercent: z.number().gt(0).lt(100),
3487
+ receiver: evmAddressSchema.optional()
3488
+ });
3489
+ var mcpPendleQuoteMintSyInputSchema = z.object({
3490
+ chainId: agentEvmChainIdSchema,
3491
+ rpcUrl: z.string().min(1).optional(),
3492
+ tokenIn: z.string().min(1),
3493
+ sy: evmAddressSchema,
3494
+ amountHuman: z.string().min(1),
3495
+ slippagePercent: z.number().gt(0).lt(100),
3496
+ receiver: evmAddressSchema.optional()
3497
+ });
3498
+ var mcpPendleQuoteRedeemSyInputSchema = z.object({
3499
+ chainId: agentEvmChainIdSchema,
3500
+ rpcUrl: z.string().min(1).optional(),
3501
+ sy: evmAddressSchema,
3502
+ tokenOut: z.string().min(1),
3503
+ amountHuman: z.string().min(1),
3504
+ slippagePercent: z.number().gt(0).lt(100),
3505
+ receiver: evmAddressSchema.optional()
3506
+ });
3507
+ var mcpPendleQuoteAddLiquidityInputSchema = z.object({
3508
+ chainId: agentEvmChainIdSchema,
3509
+ rpcUrl: z.string().min(1).optional(),
3510
+ tokensIn: z.array(z.object({ token: z.string().min(1), amountHuman: z.string().min(1) })).min(1),
3511
+ market: evmAddressSchema,
3512
+ keepYt: z.boolean().optional(),
3513
+ yt: evmAddressSchema.optional(),
3514
+ slippagePercent: z.number().gt(0).lt(100),
3515
+ receiver: evmAddressSchema.optional()
3516
+ });
3517
+ var mcpPendleQuoteRemoveLiquidityInputSchema = z.object({
3518
+ chainId: agentEvmChainIdSchema,
3519
+ rpcUrl: z.string().min(1).optional(),
3520
+ market: evmAddressSchema,
3521
+ lpAmountHuman: z.string().min(1),
3522
+ tokensOut: z.array(z.string().min(1)).min(1),
3523
+ slippagePercent: z.number().gt(0).lt(100),
3524
+ enableAggregator: z.boolean().optional(),
3525
+ receiver: evmAddressSchema.optional()
3526
+ });
3527
+ var mcpPendleBuildSwapMultisignInputSchema = withMultisignKeySourceRefine(
3528
+ evmMultisignCommonInputSchema.extend({
3529
+ tokenIn: z.string().min(1),
3530
+ tokenOut: z.string().min(1),
3531
+ amountHuman: z.string().min(1),
3532
+ slippagePercent: z.number().gt(0).lt(100),
3533
+ enableAggregator: z.boolean().optional(),
3534
+ convertSnapshot: jsonObjectSchema.optional()
3535
+ })
3536
+ );
3537
+ var mcpPendleBuildMintPyMultisignInputSchema = withMultisignKeySourceRefine(
3538
+ evmMultisignCommonInputSchema.extend({
3539
+ tokenIn: z.string().min(1),
3540
+ pt: evmAddressSchema,
3541
+ yt: evmAddressSchema,
3542
+ amountHuman: z.string().min(1),
3543
+ slippagePercent: z.number().gt(0).lt(100),
3544
+ convertSnapshot: jsonObjectSchema.optional()
3545
+ })
3546
+ );
3547
+ var mcpPendleBuildRedeemPyMultisignInputSchema = withMultisignKeySourceRefine(
3548
+ evmMultisignCommonInputSchema.extend({
3549
+ pt: evmAddressSchema,
3550
+ yt: evmAddressSchema,
3551
+ tokenOut: z.string().min(1),
3552
+ amountPtHuman: z.string().min(1),
3553
+ amountYtHuman: z.string().min(1).optional(),
3554
+ slippagePercent: z.number().gt(0).lt(100),
3555
+ convertSnapshot: jsonObjectSchema.optional()
3556
+ })
3557
+ );
3558
+ var mcpPendleBuildMintSyMultisignInputSchema = withMultisignKeySourceRefine(
3559
+ evmMultisignCommonInputSchema.extend({
3560
+ tokenIn: z.string().min(1),
3561
+ sy: evmAddressSchema,
3562
+ amountHuman: z.string().min(1),
3563
+ slippagePercent: z.number().gt(0).lt(100),
3564
+ convertSnapshot: jsonObjectSchema.optional()
3565
+ })
3566
+ );
3567
+ var mcpPendleBuildRedeemSyMultisignInputSchema = withMultisignKeySourceRefine(
3568
+ evmMultisignCommonInputSchema.extend({
3569
+ sy: evmAddressSchema,
3570
+ tokenOut: z.string().min(1),
3571
+ amountHuman: z.string().min(1),
3572
+ slippagePercent: z.number().gt(0).lt(100),
3573
+ convertSnapshot: jsonObjectSchema.optional()
3574
+ })
3575
+ );
3576
+ var mcpPendleBuildAddLiquidityMultisignInputSchema = withMultisignKeySourceRefine(
3577
+ evmMultisignCommonInputSchema.extend({
3578
+ tokensIn: z.array(z.object({ token: z.string().min(1), amountHuman: z.string().min(1) })).min(1),
3579
+ market: evmAddressSchema,
3580
+ keepYt: z.boolean().optional(),
3581
+ yt: evmAddressSchema.optional(),
3582
+ slippagePercent: z.number().gt(0).lt(100),
3583
+ convertSnapshot: jsonObjectSchema.optional()
3584
+ })
3585
+ );
3586
+ var mcpPendleBuildRemoveLiquidityMultisignInputSchema = withMultisignKeySourceRefine(
3587
+ evmMultisignCommonInputSchema.extend({
3588
+ market: evmAddressSchema,
3589
+ lpAmountHuman: z.string().min(1),
3590
+ tokensOut: z.array(z.string().min(1)).min(1),
3591
+ slippagePercent: z.number().gt(0).lt(100),
3592
+ enableAggregator: z.boolean().optional(),
3593
+ convertSnapshot: jsonObjectSchema.optional()
3594
+ })
3595
+ );
3596
+ var mcpPendleBuildRedeemRewardsMultisignInputSchema = withMultisignKeySourceRefine(
3597
+ evmMultisignCommonInputSchema.extend({
3598
+ sys: z.array(evmAddressSchema).optional(),
3599
+ yts: z.array(evmAddressSchema).optional(),
3600
+ markets: z.array(evmAddressSchema).optional(),
3601
+ convertSnapshot: jsonObjectSchema.optional()
3602
+ })
3603
+ );
3417
3604
  var mcpCompoundV3FetchMarketsInputSchema = z.object({
3418
3605
  chainId: agentEvmChainIdSchema,
3419
3606
  rpcUrl: z.string().min(1).optional().describe("Server-filled from chain registry. Agents should omit.")
@@ -7251,6 +7438,238 @@ var CORE_MCP_TOOL_DEFINITIONS = [
7251
7438
  handler: { importPath: "protocols/evm/compound-v3", exportName: "compoundV3FetchAccountSummary" },
7252
7439
  inputZod: mcpCompoundV3FetchAccountInputSchema,
7253
7440
  outputZod: mcpCompoundV3FetchAccountOutputSchema
7441
+ }),
7442
+ defineMcpTool({
7443
+ name: "ctm_pendle_fetch_markets",
7444
+ actionId: "pendle.fetch-markets",
7445
+ protocolId: "pendle",
7446
+ chainCategory: "evm",
7447
+ description: "Pendle V2: live (unexpired) markets on chainId, scanned from Core, TVL-ranked, hard cap 100. Matured YT markets are omitted. Includes points[] campaigns. Use ctm_pendle_search_assets for long-tail or a specific expired market (PT redeem / remove LP). Never Convert. load_defi_protocol pendle activates this pack.",
7448
+ prerequisites: ["chainId in get_chain_registry \u2229 Pendle GET /v1/chains"],
7449
+ followUp: ["ctm_pendle_search_assets", "ctm_pendle_fetch_prices", "ctm_pendle_quote_swap"],
7450
+ handler: { importPath: "protocols/evm/pendle", exportName: "pendleFetchMarketsSummary" },
7451
+ inputZod: mcpPendleFetchMarketsInputSchema,
7452
+ outputZod: mcpPendleFetchMarketsOutputSchema
7453
+ }),
7454
+ defineMcpTool({
7455
+ name: "ctm_pendle_fetch_prices",
7456
+ actionId: "pendle.fetch-prices",
7457
+ protocolId: "pendle",
7458
+ chainCategory: "evm",
7459
+ description: "Pendle V2: USD prices for listed or searched asset ids (GET /v1/prices/assets). Do not use Convert as a ticker.",
7460
+ prerequisites: ["chainId", "ids from fetch_markets / search_assets (or omit to price the current live listing)"],
7461
+ followUp: ["ctm_pendle_quote_swap"],
7462
+ handler: { importPath: "protocols/evm/pendle", exportName: "pendleFetchPricesSummary" },
7463
+ inputZod: mcpPendleFetchPricesInputSchema,
7464
+ outputZod: mcpPendleFetchPricesOutputSchema
7465
+ }),
7466
+ defineMcpTool({
7467
+ name: "ctm_pendle_search_assets",
7468
+ actionId: "pendle.search-assets",
7469
+ protocolId: "pendle",
7470
+ chainCategory: "evm",
7471
+ description: "Pendle V2: search live markets by ticker, 0x, or chainId-0x. Prefers unexpired hits; returns a matured market only if nothing live matched or you looked up that address (PT redeem / remove LP). Returns expiry, APY, TVL, points.",
7472
+ prerequisites: ["chainId", "query (ticker, 0x, or chainId-0x)"],
7473
+ followUp: ["ctm_pendle_quote_swap", "ctm_pendle_quote_mint_py", "ctm_pendle_quote_add_liquidity"],
7474
+ handler: { importPath: "protocols/evm/pendle", exportName: "pendleSearchAssets" },
7475
+ inputZod: mcpPendleSearchAssetsInputSchema,
7476
+ outputZod: mcpPendleSearchAssetsOutputSchema
7477
+ }),
7478
+ defineMcpTool({
7479
+ name: "ctm_pendle_quote_swap",
7480
+ actionId: "pendle.quote-swap",
7481
+ protocolId: "pendle",
7482
+ chainCategory: "evm",
7483
+ description: "Pendle V2 Hosted SDK Convert quote: token \u2194 PT or YT (this is also how you trade points). Fresh calldata; do not cache as a price ticker.",
7484
+ prerequisites: ["ctm_pendle_fetch_markets or ctm_pendle_search_assets", "activate_tool_group pendle:swap"],
7485
+ followUp: ["ctm_pendle_build_swap_multisign"],
7486
+ handler: { importPath: "protocols/evm/pendle", exportName: "pendleQuoteSwap" },
7487
+ inputZod: mcpPendleQuoteSwapInputSchema,
7488
+ outputZod: mcpPendleQuoteOutputSchema
7489
+ }),
7490
+ defineMcpTool({
7491
+ name: "ctm_pendle_quote_mint_py",
7492
+ actionId: "pendle.quote-mint-py",
7493
+ protocolId: "pendle",
7494
+ chainCategory: "evm",
7495
+ description: "Pendle V2 Convert quote: mint PT+YT from an underlying or SY.",
7496
+ prerequisites: ["activate_tool_group pendle:mint"],
7497
+ followUp: ["ctm_pendle_build_mint_py_multisign"],
7498
+ handler: { importPath: "protocols/evm/pendle", exportName: "pendleQuoteMintPy" },
7499
+ inputZod: mcpPendleQuoteMintPyInputSchema,
7500
+ outputZod: mcpPendleQuoteOutputSchema
7501
+ }),
7502
+ defineMcpTool({
7503
+ name: "ctm_pendle_quote_redeem_py",
7504
+ actionId: "pendle.quote-redeem-py",
7505
+ protocolId: "pendle",
7506
+ chainCategory: "evm",
7507
+ description: "Pendle V2 Convert quote: redeem PT+YT to underlying or SY. After expiry, pass amountYtHuman 0 (PT only).",
7508
+ prerequisites: ["activate_tool_group pendle:mint"],
7509
+ followUp: ["ctm_pendle_build_redeem_py_multisign"],
7510
+ handler: { importPath: "protocols/evm/pendle", exportName: "pendleQuoteRedeemPy" },
7511
+ inputZod: mcpPendleQuoteRedeemPyInputSchema,
7512
+ outputZod: mcpPendleQuoteOutputSchema
7513
+ }),
7514
+ defineMcpTool({
7515
+ name: "ctm_pendle_quote_mint_sy",
7516
+ actionId: "pendle.quote-mint-sy",
7517
+ protocolId: "pendle",
7518
+ chainCategory: "evm",
7519
+ description: "Pendle V2 Convert quote: wrap underlying into SY.",
7520
+ prerequisites: ["activate_tool_group pendle:mint"],
7521
+ followUp: ["ctm_pendle_build_mint_sy_multisign"],
7522
+ handler: { importPath: "protocols/evm/pendle", exportName: "pendleQuoteMintSy" },
7523
+ inputZod: mcpPendleQuoteMintSyInputSchema,
7524
+ outputZod: mcpPendleQuoteOutputSchema
7525
+ }),
7526
+ defineMcpTool({
7527
+ name: "ctm_pendle_quote_redeem_sy",
7528
+ actionId: "pendle.quote-redeem-sy",
7529
+ protocolId: "pendle",
7530
+ chainCategory: "evm",
7531
+ description: "Pendle V2 Convert quote: unwrap SY to underlying.",
7532
+ prerequisites: ["activate_tool_group pendle:mint"],
7533
+ followUp: ["ctm_pendle_build_redeem_sy_multisign"],
7534
+ handler: { importPath: "protocols/evm/pendle", exportName: "pendleQuoteRedeemSy" },
7535
+ inputZod: mcpPendleQuoteRedeemSyInputSchema,
7536
+ outputZod: mcpPendleQuoteOutputSchema
7537
+ }),
7538
+ defineMcpTool({
7539
+ name: "ctm_pendle_quote_add_liquidity",
7540
+ actionId: "pendle.quote-add-liquidity",
7541
+ protocolId: "pendle",
7542
+ chainCategory: "evm",
7543
+ description: "Pendle V2 Convert quote: add LP. keepYt+yt = zero-price-impact (keep YT in the wallet instead of selling it into the AMM).",
7544
+ prerequisites: ["activate_tool_group pendle:lp"],
7545
+ followUp: ["ctm_pendle_build_add_liquidity_multisign"],
7546
+ handler: { importPath: "protocols/evm/pendle", exportName: "pendleQuoteAddLiquidity" },
7547
+ inputZod: mcpPendleQuoteAddLiquidityInputSchema,
7548
+ outputZod: mcpPendleQuoteOutputSchema
7549
+ }),
7550
+ defineMcpTool({
7551
+ name: "ctm_pendle_quote_remove_liquidity",
7552
+ actionId: "pendle.quote-remove-liquidity",
7553
+ protocolId: "pendle",
7554
+ chainCategory: "evm",
7555
+ description: "Pendle V2 Convert quote: remove LP to tokensOut (use underlying). After expiry still works. Copy market + lpAmountHuman from ctm_pendle_fetch_positions.",
7556
+ prerequisites: ["activate_tool_group pendle:lp", "market + lpAmountHuman from fetch_positions or the user"],
7557
+ followUp: ["ctm_pendle_build_remove_liquidity_multisign"],
7558
+ handler: { importPath: "protocols/evm/pendle", exportName: "pendleQuoteRemoveLiquidity" },
7559
+ inputZod: mcpPendleQuoteRemoveLiquidityInputSchema,
7560
+ outputZod: mcpPendleQuoteOutputSchema
7561
+ }),
7562
+ defineMcpTool({
7563
+ name: "ctm_pendle_fetch_positions",
7564
+ actionId: "pendle.fetch-positions",
7565
+ protocolId: "pendle",
7566
+ chainCategory: "evm",
7567
+ description: "Pendle V2: this wallet\u2019s LP holdings from official Core dashboard (including matured). Not the node token list. Use before remove LP. ~4 CU. Do not treat claimable amounts here as a live redeem quote.",
7568
+ prerequisites: ["activate_tool_group pendle:lp", "user address", "optional chainId"],
7569
+ followUp: ["ctm_pendle_quote_remove_liquidity"],
7570
+ handler: { importPath: "protocols/evm/pendle", exportName: "pendleFetchPositions" },
7571
+ inputZod: mcpPendleFetchPositionsInputSchema,
7572
+ outputZod: mcpPendleFetchPositionsOutputSchema
7573
+ }),
7574
+ defineMultisignSubmitMcpTool({
7575
+ name: "ctm_pendle_build_swap_multisign",
7576
+ actionId: "pendle.swap",
7577
+ protocolId: "pendle",
7578
+ chainCategory: "evm",
7579
+ description: "Pendle V2: approve Convert tx.to then swap token \u2194 PT/YT. 30-min multiSign expiry unless expiryDate is set. Fresh Convert at build time.",
7580
+ prerequisites: [
7581
+ "ctm_pendle_quote_swap",
7582
+ "get_multi_sign_gas_options + user confirms useCustomGas and 30-minute deadline",
7583
+ "keyGenId + chainId + purposeText + slippagePercent"
7584
+ ],
7585
+ handler: { importPath: "protocols/evm/pendle", exportName: "buildEvmMultisignBodyPendleSwapBatch" },
7586
+ inputZod: mcpPendleBuildSwapMultisignInputSchema
7587
+ }),
7588
+ defineMultisignSubmitMcpTool({
7589
+ name: "ctm_pendle_build_mint_py_multisign",
7590
+ actionId: "pendle.mint-py",
7591
+ protocolId: "pendle",
7592
+ chainCategory: "evm",
7593
+ description: "Pendle V2: mint PT+YT multiSign (approve + Convert). 30-min expiry default.",
7594
+ prerequisites: ["ctm_pendle_quote_mint_py", "keyGenId + purposeText + slippagePercent"],
7595
+ handler: { importPath: "protocols/evm/pendle", exportName: "buildEvmMultisignBodyPendleMintPyBatch" },
7596
+ inputZod: mcpPendleBuildMintPyMultisignInputSchema
7597
+ }),
7598
+ defineMultisignSubmitMcpTool({
7599
+ name: "ctm_pendle_build_redeem_py_multisign",
7600
+ actionId: "pendle.redeem-py",
7601
+ protocolId: "pendle",
7602
+ chainCategory: "evm",
7603
+ description: "Pendle V2: redeem PT+YT multiSign. After expiry, pass amountYtHuman 0 (PT only). 30-min expiry default.",
7604
+ prerequisites: ["ctm_pendle_quote_redeem_py", "keyGenId + purposeText + slippagePercent"],
7605
+ handler: { importPath: "protocols/evm/pendle", exportName: "buildEvmMultisignBodyPendleRedeemPyBatch" },
7606
+ inputZod: mcpPendleBuildRedeemPyMultisignInputSchema
7607
+ }),
7608
+ defineMultisignSubmitMcpTool({
7609
+ name: "ctm_pendle_build_mint_sy_multisign",
7610
+ actionId: "pendle.mint-sy",
7611
+ protocolId: "pendle",
7612
+ chainCategory: "evm",
7613
+ description: "Pendle V2: mint SY multiSign. 30-min expiry default.",
7614
+ prerequisites: ["ctm_pendle_quote_mint_sy", "keyGenId + purposeText + slippagePercent"],
7615
+ handler: { importPath: "protocols/evm/pendle", exportName: "buildEvmMultisignBodyPendleMintSyBatch" },
7616
+ inputZod: mcpPendleBuildMintSyMultisignInputSchema
7617
+ }),
7618
+ defineMultisignSubmitMcpTool({
7619
+ name: "ctm_pendle_build_redeem_sy_multisign",
7620
+ actionId: "pendle.redeem-sy",
7621
+ protocolId: "pendle",
7622
+ chainCategory: "evm",
7623
+ description: "Pendle V2: redeem SY multiSign. 30-min expiry default.",
7624
+ prerequisites: ["ctm_pendle_quote_redeem_sy", "keyGenId + purposeText + slippagePercent"],
7625
+ handler: { importPath: "protocols/evm/pendle", exportName: "buildEvmMultisignBodyPendleRedeemSyBatch" },
7626
+ inputZod: mcpPendleBuildRedeemSyMultisignInputSchema
7627
+ }),
7628
+ defineMultisignSubmitMcpTool({
7629
+ name: "ctm_pendle_build_add_liquidity_multisign",
7630
+ actionId: "pendle.add-liquidity",
7631
+ protocolId: "pendle",
7632
+ chainCategory: "evm",
7633
+ description: "Pendle V2: add LP multiSign. 30-min expiry default.",
7634
+ prerequisites: ["ctm_pendle_quote_add_liquidity", "keyGenId + purposeText + slippagePercent"],
7635
+ handler: { importPath: "protocols/evm/pendle", exportName: "buildEvmMultisignBodyPendleAddLiquidityBatch" },
7636
+ inputZod: mcpPendleBuildAddLiquidityMultisignInputSchema
7637
+ }),
7638
+ defineMultisignSubmitMcpTool({
7639
+ name: "ctm_pendle_build_remove_liquidity_multisign",
7640
+ actionId: "pendle.remove-liquidity",
7641
+ protocolId: "pendle",
7642
+ chainCategory: "evm",
7643
+ description: "Pendle V2: remove LP multiSign. 30-min expiry default.",
7644
+ prerequisites: ["ctm_pendle_quote_remove_liquidity", "keyGenId + purposeText + slippagePercent"],
7645
+ handler: { importPath: "protocols/evm/pendle", exportName: "buildEvmMultisignBodyPendleRemoveLiquidityBatch" },
7646
+ inputZod: mcpPendleBuildRemoveLiquidityMultisignInputSchema
7647
+ }),
7648
+ defineMcpTool({
7649
+ name: "ctm_pendle_fetch_merkle_rewards",
7650
+ actionId: "pendle.fetch-merkle-rewards",
7651
+ protocolId: "pendle",
7652
+ chainCategory: "evm",
7653
+ description: "Pendle V2: list off-chain airdrop rows for a wallet (token, amount). Informational only \u2014 Core has no claim proofs. Tell the user to claim airdrops on app.pendle.finance. Do not invent a claim tx. On-chain SY/YT/LP incentives use ctm_pendle_build_redeem_rewards_multisign.",
7654
+ prerequisites: ["activate_tool_group pendle:rewards", "user address"],
7655
+ followUp: [],
7656
+ handler: { importPath: "protocols/evm/pendle", exportName: "pendleFetchMerkleRewards" },
7657
+ inputZod: mcpPendleFetchMerkleRewardsInputSchema,
7658
+ outputZod: mcpPendleFetchMerkleRewardsOutputSchema
7659
+ }),
7660
+ defineMultisignSubmitMcpTool({
7661
+ name: "ctm_pendle_build_redeem_rewards_multisign",
7662
+ actionId: "pendle.redeem-rewards",
7663
+ protocolId: "pendle",
7664
+ chainCategory: "evm",
7665
+ description: "Pendle V2: redeem on-chain interest and incentives from SY, YT, and LP (usually PENDLE) via Hosted SDK. Not merkle airdrops. 30-min expiry default.",
7666
+ prerequisites: [
7667
+ "activate_tool_group pendle:rewards",
7668
+ "sys / yts / markets from fetch_markets or search",
7669
+ "keyGenId + purposeText"
7670
+ ],
7671
+ handler: { importPath: "protocols/evm/pendle", exportName: "buildEvmMultisignBodyPendleRedeemRewardsBatch" },
7672
+ inputZod: mcpPendleBuildRedeemRewardsMultisignInputSchema
7254
7673
  })
7255
7674
  ];
7256
7675
  var MCP_TOOL_DEFINITIONS = [
@@ -7501,6 +7920,17 @@ registerProtocolModule(ethenaProtocolModule);
7501
7920
  function isMapleSyrupSupportedChain(chainId) {
7502
7921
  return chainId === 1 || chainId === 11155111;
7503
7922
  }
7923
+ function matchesAssetFilter(opts) {
7924
+ const f = (opts.filter ?? "").trim();
7925
+ if (!f) return true;
7926
+ const addr = (opts.address ?? "").trim();
7927
+ if (isAddress(f) && isAddress(addr)) {
7928
+ return getAddress(addr) === getAddress(f);
7929
+ }
7930
+ const sym = (opts.symbol ?? "").trim();
7931
+ if (!sym) return false;
7932
+ return sym.toLowerCase() === f.toLowerCase();
7933
+ }
7504
7934
 
7505
7935
  // src/protocols/evm/maple/index.ts
7506
7936
  var MAPLE_PROTOCOL_ID = "maple-syrup";
@@ -9799,6 +10229,347 @@ var compoundV3ProtocolModule = {
9799
10229
  ]
9800
10230
  };
9801
10231
  registerProtocolModule(compoundV3ProtocolModule);
10232
+
10233
+ // src/protocols/evm/pendle/support.ts
10234
+ var PENDLE_PROTOCOL_ID = "pendle";
10235
+ var PENDLE_CORE_API_BASE = "https://api-v2.pendle.finance/core";
10236
+ var PENDLE_LISTING_CAP = 100;
10237
+ var PENDLE_LISTING_MAX_PAGES = 8;
10238
+ var PENDLE_ICON_CACHE_MS = 12 * 60 * 1e3;
10239
+ var PENDLE_CHAIN_CACHE_MS = 30 * 60 * 1e3;
10240
+ function parsePendleAssetId(id) {
10241
+ const raw = (id ?? "").trim();
10242
+ const dash = raw.indexOf("-");
10243
+ if (dash <= 0) return null;
10244
+ const chainId = Number.parseInt(raw.slice(0, dash), 10);
10245
+ const address = raw.slice(dash + 1).trim();
10246
+ if (!Number.isFinite(chainId) || chainId <= 0 || !address) return null;
10247
+ return { chainId, address };
10248
+ }
10249
+
10250
+ // src/protocols/evm/pendle/api.ts
10251
+ var FETCH_TIMEOUT_MS = 12e4;
10252
+ var PendleApiError = class extends Error {
10253
+ status;
10254
+ path;
10255
+ constructor(message, status, path) {
10256
+ super(message);
10257
+ this.name = "PendleApiError";
10258
+ this.status = status;
10259
+ this.path = path;
10260
+ }
10261
+ };
10262
+ function sleep(ms) {
10263
+ return new Promise((resolve) => setTimeout(resolve, ms));
10264
+ }
10265
+ function queryString(params) {
10266
+ const q = new URLSearchParams();
10267
+ for (const [k, v] of Object.entries(params)) {
10268
+ if (v === void 0 || v === "") continue;
10269
+ q.set(k, String(v));
10270
+ }
10271
+ const s = q.toString();
10272
+ return s ? `?${s}` : "";
10273
+ }
10274
+ async function pendleCoreFetch(args) {
10275
+ const path = args.path.startsWith("/") ? args.path : `/${args.path}`;
10276
+ const url = `${PENDLE_CORE_API_BASE}${path}${queryString(args.query ?? {})}`;
10277
+ const headers = { Accept: "application/json" };
10278
+ if (args.apiKey?.trim()) headers.Authorization = `Bearer ${args.apiKey.trim()}`;
10279
+ if (args.body !== void 0) headers["Content-Type"] = "application/json";
10280
+ let lastError;
10281
+ for (let attempt = 0; attempt < 4; attempt++) {
10282
+ const ac = new AbortController();
10283
+ const timer = setTimeout(() => ac.abort(), FETCH_TIMEOUT_MS);
10284
+ try {
10285
+ const res = await fetch(url, {
10286
+ method: args.method ?? "GET",
10287
+ headers,
10288
+ body: args.body === void 0 ? void 0 : JSON.stringify(args.body),
10289
+ signal: ac.signal
10290
+ });
10291
+ if (res.status === 429) {
10292
+ const wait = Math.min(8e3, 500 * 2 ** attempt);
10293
+ await sleep(wait);
10294
+ lastError = new PendleApiError(`Pendle API rate limited (429) on ${path}`, 429, path);
10295
+ continue;
10296
+ }
10297
+ const text = await res.text();
10298
+ if (!res.ok) {
10299
+ throw new PendleApiError(
10300
+ `Pendle API ${res.status} ${path}: ${text.slice(0, 400)}`,
10301
+ res.status,
10302
+ path
10303
+ );
10304
+ }
10305
+ if (!text.trim()) return {};
10306
+ return JSON.parse(text);
10307
+ } catch (err) {
10308
+ lastError = err;
10309
+ if (err instanceof PendleApiError && err.status !== 429) throw err;
10310
+ if (attempt < 3 && (err instanceof PendleApiError || err?.name === "AbortError")) {
10311
+ await sleep(Math.min(8e3, 400 * 2 ** attempt));
10312
+ continue;
10313
+ }
10314
+ throw err;
10315
+ } finally {
10316
+ clearTimeout(timer);
10317
+ }
10318
+ }
10319
+ throw lastError instanceof Error ? lastError : new Error(String(lastError));
10320
+ }
10321
+
10322
+ // src/protocols/evm/pendle/discover.ts
10323
+ var marketsCacheByChain = /* @__PURE__ */ new Map();
10324
+ var chainIdsCache = null;
10325
+ function asRecord(v) {
10326
+ return v && typeof v === "object" && !Array.isArray(v) ? v : null;
10327
+ }
10328
+ function asNumber(v) {
10329
+ if (typeof v === "number" && Number.isFinite(v)) return v;
10330
+ if (typeof v === "string" && v.trim()) {
10331
+ const n = Number.parseFloat(v);
10332
+ return Number.isFinite(n) ? n : null;
10333
+ }
10334
+ return null;
10335
+ }
10336
+ function asString(v) {
10337
+ if (typeof v === "string" && v.trim()) return v.trim();
10338
+ return null;
10339
+ }
10340
+ function asExpiry(v) {
10341
+ const s = asString(v);
10342
+ if (s) return s;
10343
+ const n = asNumber(v);
10344
+ if (n == null) return null;
10345
+ const ms = n < 1e12 ? n * 1e3 : n;
10346
+ return new Date(ms).toISOString();
10347
+ }
10348
+ function pendleMarketExpiryMs(expiry) {
10349
+ const raw = (expiry ?? "").trim();
10350
+ if (!raw) return null;
10351
+ if (/^\d+$/.test(raw)) {
10352
+ const n = Number(raw);
10353
+ return n < 1e12 ? n * 1e3 : n;
10354
+ }
10355
+ const t = Date.parse(raw);
10356
+ return Number.isFinite(t) ? t : null;
10357
+ }
10358
+ function isPendleMarketExpired(row, nowMs = Date.now()) {
10359
+ const t = pendleMarketExpiryMs(row.expiry);
10360
+ if (t == null) return false;
10361
+ return t <= nowMs;
10362
+ }
10363
+ function marketMatchesPin(row, address) {
10364
+ const a = address.trim().toLowerCase();
10365
+ if (!a) return false;
10366
+ return [row.address, row.pt, row.yt, row.sy].some((x) => x.toLowerCase() === a);
10367
+ }
10368
+ function selectPendleListingMarkets(rows, args = {}) {
10369
+ const nowMs = args.nowMs ?? Date.now();
10370
+ const cap = args.cap ?? PENDLE_LISTING_CAP;
10371
+ const pins = (args.includeAddresses ?? []).map((a) => a.trim().toLowerCase()).filter(Boolean);
10372
+ const q = (args.query ?? "").trim();
10373
+ let out = rows.filter((r) => {
10374
+ const pinned = pins.some((p) => marketMatchesPin(r, p));
10375
+ if (!args.includeExpired && !pinned && isPendleMarketExpired(r, nowMs)) return false;
10376
+ if (args.pointsOnly && r.points.length === 0) return false;
10377
+ if (q && !marketMatchesQuery(r, q)) return false;
10378
+ return true;
10379
+ });
10380
+ out.sort(sortPendleMarketsByTvl);
10381
+ return out.slice(0, cap);
10382
+ }
10383
+ function addressFromAssetIdOrHex(raw, fallbackChainId) {
10384
+ if (typeof raw !== "string" || !raw.trim()) return null;
10385
+ const parsed = parsePendleAssetId(raw);
10386
+ if (parsed) {
10387
+ try {
10388
+ return getAddress(parsed.address);
10389
+ } catch {
10390
+ return parsed.address.toLowerCase();
10391
+ }
10392
+ }
10393
+ if (isAddress(raw)) return getAddress(raw);
10394
+ if (raw.startsWith(`${fallbackChainId}-`)) {
10395
+ const rest = raw.slice(String(fallbackChainId).length + 1);
10396
+ if (isAddress(rest)) return getAddress(rest);
10397
+ }
10398
+ return null;
10399
+ }
10400
+ function parsePoints(raw) {
10401
+ if (!Array.isArray(raw)) return [];
10402
+ const out = [];
10403
+ for (const item of raw) {
10404
+ const o = asRecord(item);
10405
+ if (!o) continue;
10406
+ const name = asString(o.name) ?? asString(o.key) ?? asString(o.pointName);
10407
+ if (!name) continue;
10408
+ out.push({
10409
+ name,
10410
+ type: asString(o.type),
10411
+ pendleAsset: asString(o.pendleAsset),
10412
+ value: asNumber(o.value)
10413
+ });
10414
+ }
10415
+ return out;
10416
+ }
10417
+ function marketTvlUsd(row) {
10418
+ return row.tvlUsd ?? row.liquidityUsd ?? 0;
10419
+ }
10420
+ function sortPendleMarketsByTvl(a, b) {
10421
+ const d = marketTvlUsd(b) - marketTvlUsd(a);
10422
+ if (d !== 0) return d;
10423
+ return a.name.localeCompare(b.name, void 0, { sensitivity: "base" });
10424
+ }
10425
+ function parsePendleMarket(raw) {
10426
+ const o = asRecord(raw);
10427
+ if (!o) return null;
10428
+ const chainId = asNumber(o.chainId);
10429
+ const address = addressFromAssetIdOrHex(o.address, chainId ?? 0);
10430
+ if (chainId == null || !address) return null;
10431
+ const details = asRecord(o.details);
10432
+ const tvl = asNumber(o.tvl) ?? asNumber(details?.tvl) ?? asNumber(details?.totalTvl) ?? asNumber(asRecord(details?.liquidity)?.usd);
10433
+ const liquidity = asNumber(o.liquidity) ?? asNumber(details?.liquidity) ?? asNumber(asRecord(details?.liquidity)?.usd);
10434
+ const impliedApy = asNumber(o.impliedApy) ?? asNumber(details?.impliedApy) ?? asNumber(asRecord(o.pt)?.impliedApy);
10435
+ const pt = addressFromAssetIdOrHex(o.pt ?? asRecord(o.pt)?.address ?? asRecord(o.pt)?.id, chainId);
10436
+ const yt = addressFromAssetIdOrHex(o.yt ?? asRecord(o.yt)?.address ?? asRecord(o.yt)?.id, chainId);
10437
+ const sy = addressFromAssetIdOrHex(o.sy ?? asRecord(o.sy)?.address ?? asRecord(o.sy)?.id, chainId);
10438
+ const underlying = addressFromAssetIdOrHex(
10439
+ o.underlyingAsset ?? o.underlying ?? asRecord(o.underlyingAsset)?.address,
10440
+ chainId
10441
+ );
10442
+ if (!pt || !yt || !sy || !underlying) return null;
10443
+ const expired = asExpiry(o.expiry) ?? asExpiry(details?.expiry);
10444
+ return {
10445
+ chainId,
10446
+ name: asString(o.name) ?? asString(o.proSymbol) ?? `${address.slice(0, 8)}\u2026`,
10447
+ address,
10448
+ expiry: expired,
10449
+ pt,
10450
+ yt,
10451
+ sy,
10452
+ underlying,
10453
+ underlyingSymbol: asString(asRecord(o.underlyingAsset)?.symbol) ?? asString(o.underlyingSymbol),
10454
+ ptSymbol: asString(asRecord(o.pt)?.symbol) ?? asString(o.ptSymbol),
10455
+ ytSymbol: asString(asRecord(o.yt)?.symbol) ?? asString(o.ytSymbol),
10456
+ impliedApy,
10457
+ tvlUsd: tvl,
10458
+ liquidityUsd: liquidity,
10459
+ points: parsePoints(o.points ?? details?.points)
10460
+ };
10461
+ }
10462
+ async function pendleFetchSupportedChainIds() {
10463
+ const now = Date.now();
10464
+ if (chainIdsCache && now - chainIdsCache.at < PENDLE_CHAIN_CACHE_MS) return chainIdsCache.chainIds;
10465
+ const json = await pendleCoreFetch({ path: "/v1/chains" });
10466
+ const ids = Array.isArray(json.chainIds) ? json.chainIds.map((n) => Number(n)).filter((n) => Number.isFinite(n) && n > 0) : [];
10467
+ chainIdsCache = { at: now, chainIds: ids };
10468
+ return ids;
10469
+ }
10470
+ async function isPendleChainSupported(chainId) {
10471
+ try {
10472
+ const ids = await pendleFetchSupportedChainIds();
10473
+ if (ids.length === 0) return true;
10474
+ return ids.includes(chainId);
10475
+ } catch {
10476
+ return true;
10477
+ }
10478
+ }
10479
+ async function pendleFetchMarketsPage(args) {
10480
+ const limit = Math.min(PENDLE_LISTING_CAP, Math.max(1, args.limit));
10481
+ const json = await pendleCoreFetch({
10482
+ path: "/v2/markets/all",
10483
+ query: {
10484
+ skip: args.skip ?? 0,
10485
+ limit,
10486
+ ...args.chainId != null ? { chainId: args.chainId } : {}
10487
+ }
10488
+ });
10489
+ const raw = Array.isArray(json.markets) ? json.markets : Array.isArray(json.results) ? json.results : [];
10490
+ const rows = [];
10491
+ for (const item of raw) {
10492
+ const row = parsePendleMarket(item);
10493
+ if (row) rows.push(row);
10494
+ }
10495
+ return rows;
10496
+ }
10497
+ async function pendleFetchMarketsForChain(chainId) {
10498
+ const now = Date.now();
10499
+ const cached2 = marketsCacheByChain.get(chainId);
10500
+ if (cached2 && now - cached2.at < PENDLE_ICON_CACHE_MS) return cached2.rows;
10501
+ const rows = [];
10502
+ for (let page = 0; page < PENDLE_LISTING_MAX_PAGES; page++) {
10503
+ const batch = await pendleFetchMarketsPage({
10504
+ skip: page * PENDLE_LISTING_CAP,
10505
+ limit: PENDLE_LISTING_CAP,
10506
+ chainId
10507
+ });
10508
+ const onChain = batch.filter((r) => r.chainId === chainId);
10509
+ rows.push(...onChain);
10510
+ if (batch.length < PENDLE_LISTING_CAP || onChain.length === 0) break;
10511
+ }
10512
+ marketsCacheByChain.set(chainId, { at: now, rows });
10513
+ return rows;
10514
+ }
10515
+ function marketMatchesQuery(row, query) {
10516
+ const q = query.trim();
10517
+ if (!q) return true;
10518
+ if (matchesAssetFilter({ address: row.address, symbol: row.name, filter: q }) || matchesAssetFilter({ address: row.pt, symbol: row.ptSymbol ?? void 0, filter: q }) || matchesAssetFilter({ address: row.yt, symbol: row.ytSymbol ?? void 0, filter: q }) || matchesAssetFilter({ address: row.sy, filter: q }) || matchesAssetFilter({ address: row.underlying, symbol: row.underlyingSymbol ?? void 0, filter: q })) {
10519
+ return true;
10520
+ }
10521
+ const hay = `${row.name} ${row.ptSymbol ?? ""} ${row.ytSymbol ?? ""} ${row.underlyingSymbol ?? ""}`.toLowerCase();
10522
+ return hay.includes(q.toLowerCase());
10523
+ }
10524
+ async function pendleFetchMarketsSummary(args) {
10525
+ if (!await isPendleChainSupported(args.chainId)) {
10526
+ return {
10527
+ chainId: args.chainId,
10528
+ markets: [],
10529
+ notes: `Pendle Core API does not list chain ${args.chainId}.`
10530
+ };
10531
+ }
10532
+ const scanned = await pendleFetchMarketsForChain(args.chainId);
10533
+ const rows = selectPendleListingMarkets(scanned, {
10534
+ query: args.query,
10535
+ pointsOnly: args.pointsOnly,
10536
+ includeAddresses: args.includeAddresses
10537
+ });
10538
+ const expiredOmitted = scanned.filter((r) => isPendleMarketExpired(r)).length;
10539
+ return {
10540
+ chainId: args.chainId,
10541
+ markets: rows,
10542
+ notes: `Top ${rows.length} active Pendle markets on chain ${args.chainId} by TVL/liquidity (scanned ${scanned.length}, omitted ${expiredOmitted} matured). Use ctm_pendle_search_assets for long-tail or expired markets (PT redeem / remove LP). Do not web-search Pendle APYs.`
10543
+ };
10544
+ }
10545
+
10546
+ // src/protocols/evm/pendle/index.ts
10547
+ var pendleProtocolModule = {
10548
+ id: PENDLE_PROTOCOL_ID,
10549
+ chainCategory: "evm",
10550
+ isChainSupported(ctx) {
10551
+ if (ctx.chainCategory !== "evm") return false;
10552
+ const n = typeof ctx.chainId === "number" ? ctx.chainId : Number.parseInt(String(ctx.chainId), 10);
10553
+ if (!Number.isFinite(n)) return false;
10554
+ return isPendleChainSupported(n);
10555
+ },
10556
+ isTokenSupported(token) {
10557
+ if (token.category !== "evm") return false;
10558
+ return token.kind === "native" || token.kind === "erc20";
10559
+ },
10560
+ actions: [
10561
+ { id: "pendle.fetch-markets", protocolId: PENDLE_PROTOCOL_ID, chainCategory: "evm", description: "List live Pendle markets (TVL-ranked, cap 100, matured omitted)", commonParams: [], params: {} },
10562
+ { id: "pendle.search-assets", protocolId: PENDLE_PROTOCOL_ID, chainCategory: "evm", description: "Search live PT/YT/SY/underlying (matured only if address-pinned)", commonParams: [], params: {} },
10563
+ { id: "pendle.swap", protocolId: PENDLE_PROTOCOL_ID, chainCategory: "evm", description: "Swap token \u2194 PT/YT via Hosted SDK convert", commonParams: ["keyGen", "purposeText", "useCustomGas"], params: {} },
10564
+ { id: "pendle.mint-py", protocolId: PENDLE_PROTOCOL_ID, chainCategory: "evm", description: "Mint PT + YT", commonParams: ["keyGen", "purposeText", "useCustomGas"], params: {} },
10565
+ { id: "pendle.redeem-py", protocolId: PENDLE_PROTOCOL_ID, chainCategory: "evm", description: "Redeem PT + YT (PT only after expiry)", commonParams: ["keyGen", "purposeText", "useCustomGas"], params: {} },
10566
+ { id: "pendle.add-liquidity", protocolId: PENDLE_PROTOCOL_ID, chainCategory: "evm", description: "Add Pendle AMM liquidity", commonParams: ["keyGen", "purposeText", "useCustomGas"], params: {} },
10567
+ { id: "pendle.fetch-positions", protocolId: PENDLE_PROTOCOL_ID, chainCategory: "evm", description: "List this wallet\u2019s Pendle LP (including matured)", commonParams: [], params: {} },
10568
+ { id: "pendle.remove-liquidity", protocolId: PENDLE_PROTOCOL_ID, chainCategory: "evm", description: "Remove Pendle AMM liquidity", commonParams: ["keyGen", "purposeText", "useCustomGas"], params: {} },
10569
+ { id: "pendle.redeem-rewards", protocolId: PENDLE_PROTOCOL_ID, chainCategory: "evm", description: "Redeem on-chain SY/YT/LP interest and incentives (not merkle airdrops)", commonParams: ["keyGen", "purposeText", "useCustomGas"], params: {} }
10570
+ ]
10571
+ };
10572
+ registerProtocolModule(pendleProtocolModule);
9802
10573
  var skillsDir = join(dirname(fileURLToPath(import.meta.url)), "skills");
9803
10574
  var SKILL_PROTOCOL_IDS = [
9804
10575
  "aave-v4",
@@ -9815,6 +10586,7 @@ var SKILL_PROTOCOL_IDS = [
9815
10586
  "morpho",
9816
10587
  "circle-cctp",
9817
10588
  "aerodrome",
10589
+ "pendle",
9818
10590
  "continuum-dao",
9819
10591
  "compound-v3",
9820
10592
  "yield-compare"
@@ -10295,6 +11067,55 @@ var PROTOCOL_SUPPORT_ADVISORS = {
10295
11067
  return cache.has(normalized);
10296
11068
  }
10297
11069
  }),
11070
+ [PENDLE_PROTOCOL_ID]: advisor(PENDLE_PROTOCOL_ID, "api_underlyings", {
11071
+ async supportedChainIds() {
11072
+ try {
11073
+ return [...await pendleFetchSupportedChainIds()].sort((a, b) => a - b);
11074
+ } catch {
11075
+ return [];
11076
+ }
11077
+ },
11078
+ async supportedTokens(chainId) {
11079
+ if (!await isPendleChainSupported(chainId)) {
11080
+ return { tokens: [], notes: `Pendle Core API does not list chain ${chainId}.` };
11081
+ }
11082
+ const listed = await pendleFetchMarketsSummary({ chainId });
11083
+ const byAddr = /* @__PURE__ */ new Map();
11084
+ const add = (address, symbol, roles) => {
11085
+ const key = address.toLowerCase();
11086
+ const prev = byAddr.get(key);
11087
+ byAddr.set(key, {
11088
+ address,
11089
+ symbol: symbol ?? prev?.symbol,
11090
+ roles: [.../* @__PURE__ */ new Set([...prev?.roles ?? [], ...roles])]
11091
+ });
11092
+ };
11093
+ for (const m of listed.markets) {
11094
+ add(m.underlying, m.underlyingSymbol, ["underlying"]);
11095
+ add(m.pt, m.ptSymbol, ["pt"]);
11096
+ add(m.yt, m.ytSymbol, ["yt"]);
11097
+ add(m.sy, null, ["sy"]);
11098
+ add(m.address, m.name, ["lp", "market"]);
11099
+ }
11100
+ return {
11101
+ tokens: [...byAddr.values()],
11102
+ notes: "Official Pendle live (unexpired) TVL-ranked markets on this chain, cap 100 (PT/YT/SY/LP + underlyings). Use ctm_pendle_search_assets for long-tail or matured markets. Use ctm_pendle_fetch_positions for this wallet\u2019s LP (including matured). Do not hardcode routers."
11103
+ };
11104
+ },
11105
+ async isTokenSupported(chainId, address) {
11106
+ if (!await isPendleChainSupported(chainId)) return false;
11107
+ let normalized;
11108
+ try {
11109
+ normalized = getAddress(address).toLowerCase();
11110
+ } catch {
11111
+ return false;
11112
+ }
11113
+ const listed = await pendleFetchMarketsSummary({ chainId });
11114
+ return listed.markets.some(
11115
+ (m) => m.address.toLowerCase() === normalized || m.pt.toLowerCase() === normalized || m.yt.toLowerCase() === normalized || m.sy.toLowerCase() === normalized || m.underlying.toLowerCase() === normalized
11116
+ );
11117
+ }
11118
+ }),
10298
11119
  arcus: advisor("arcus", "api_underlyings", {
10299
11120
  async supportedChainIds() {
10300
11121
  return [...ARCUS_SUPPORTED_CHAIN_IDS];
@@ -10332,6 +11153,7 @@ registerProtocolModule(veniceProtocolModule);
10332
11153
  registerProtocolModule(aerodromeProtocolModule);
10333
11154
  registerProtocolModule(continuumDaoProtocolModule);
10334
11155
  registerProtocolModule(compoundV3ProtocolModule);
11156
+ registerProtocolModule(pendleProtocolModule);
10335
11157
  function getAgentCatalog() {
10336
11158
  return {
10337
11159
  protocols: getProtocolModules(),
@@ -10357,11 +11179,12 @@ function getAgentCatalog() {
10357
11179
  aerodrome: aerodromeProtocolModule,
10358
11180
  continuumDao: continuumDaoProtocolModule,
10359
11181
  compoundV3: compoundV3ProtocolModule,
11182
+ pendle: pendleProtocolModule,
10360
11183
  /** Prefer getAgentCatalogForMcp() or getMcpToolDefinitions() for MCP servers. */
10361
11184
  mcp: getAgentCatalogForMcp()
10362
11185
  };
10363
11186
  }
10364
11187
 
10365
- export { EVM_COMMON_PARAM_DOCS, MANAGEMENT_SIG_DOC, MCP_NON_SUBMIT_TOOL_NAMES, MCP_TOOL_DEFINITIONS, MCP_TOOL_INPUT_SCHEMAS, MCP_TOOL_OUTPUT_SCHEMAS, MULTISIGN_OUTPUT_DOC, MULTISIGN_SUBMIT_OUTPUT_DOC, PROTOCOL_SUPPORT_ADVISORS, chainDetailSchema, evmAddressSchema, evmMultisignCommonInputSchema, getActionsByChainCategory, getAgentCatalog, getAgentCatalogForMcp, getMcpToolByName, getMcpToolDefinitions, getMcpToolInputSchema, getMcpToolOutputSchema, getProtocolDiscoverySummary, getProtocolModules, getProtocolSkill, getProtocolSupportAdvisor, getToolsForProtocol, jsonObjectSchema, keyGenSchema, listProtocolSupportAdvisorIds, listProtocolsWithSkills, mcpAaveV4BorrowInputSchema, mcpAaveV4DepositInputSchema, mcpAaveV4FetchMarketInputSchema, mcpAaveV4FetchMarketOutputSchema, mcpAaveV4FetchMarketsInputSchema, mcpAaveV4FetchMarketsOutputSchema, mcpAaveV4RepayInputSchema, mcpAaveV4WithdrawInputSchema, mcpAerodromeBuildAddLiquidityMultisignInputSchema, mcpAerodromeBuildClBurnMultisignInputSchema, mcpAerodromeBuildClCollectFeesMultisignInputSchema, mcpAerodromeBuildClDecreaseMultisignInputSchema, mcpAerodromeBuildClIncreaseMultisignInputSchema, mcpAerodromeBuildClMintMultisignInputSchema, mcpAerodromeBuildClaimEmissionsMultisignInputSchema, mcpAerodromeBuildClaimFeesMultisignInputSchema, mcpAerodromeBuildGaugeStakeMultisignInputSchema, mcpAerodromeBuildGaugeUnstakeMultisignInputSchema, mcpAerodromeBuildRemoveLiquidityMultisignInputSchema, mcpAerodromeBuildSwapMultisignInputSchema, mcpAerodromeDiscoverPoolsInputSchema, mcpAerodromeDiscoverPoolsOutputSchema, mcpAerodromeFetchLpYieldsInputSchema, mcpAerodromeFetchLpYieldsOutputSchema, mcpAerodromeFetchPoolsInputSchema, mcpAerodromeFetchPoolsOutputSchema, mcpAerodromeFetchPositionsInputSchema, mcpAerodromeFetchPositionsOutputSchema, mcpAerodromeFetchStockLpYieldsInputSchema, mcpAerodromeFetchStockLpYieldsOutputSchema, mcpAerodromeQuoteAddLiquidityInputSchema, mcpAerodromeQuoteAddLiquidityOutputSchema, mcpAerodromeQuoteClDepositInputSchema, mcpAerodromeQuoteClDepositOutputSchema, mcpAerodromeQuoteInputSchema, mcpAerodromeQuoteOutputSchema, mcpArcusBuildCancelOrderMultisignInputSchema, mcpArcusBuildCloseMultisignInputSchema, mcpArcusBuildCreateApiKeyMultisignInputSchema, mcpArcusBuildDepositMultisignInputSchema, mcpArcusBuildPlaceOrderMultisignInputSchema, mcpArcusBuildSetLeverageMultisignInputSchema, mcpArcusBuildWithdrawMultisignInputSchema, mcpArcusFetchAccountInputSchema, mcpArcusFetchAccountOutputSchema, mcpArcusFetchMarketSnapshotInputSchema, mcpArcusFetchMarketSnapshotOutputSchema, mcpArcusFetchMarketsInputSchema, mcpArcusFetchMarketsOutputSchema, mcpArcusFetchOhlcvInputSchema, mcpArcusFetchOhlcvOutputSchema, mcpArcusFetchOpenContextInputSchema, mcpArcusFetchOpenContextOutputSchema, mcpArcusFetchOpenOrdersInputSchema, mcpArcusFetchOpenOrdersOutputSchema, mcpArcusFetchPositionsInputSchema, mcpArcusFetchPositionsOutputSchema, mcpArcusSearchMarketsInputSchema, mcpArcusSearchMarketsOutputSchema, mcpArcusSpotBuildRfqMultisignInputSchema, mcpArcusSpotFetchBalancesInputSchema, mcpArcusSpotFetchBalancesOutputSchema, mcpArcusSpotFetchMarketsInputSchema, mcpArcusSpotFetchMarketsOutputSchema, mcpArcusSpotFetchOhlcvInputSchema, mcpArcusSpotFetchOhlcvOutputSchema, mcpCompoundV3BulkerInputSchema, mcpCompoundV3ClaimRewardsInputSchema, mcpCompoundV3FetchAccountInputSchema, mcpCompoundV3FetchAccountOutputSchema, mcpCompoundV3FetchMarketInputSchema, mcpCompoundV3FetchMarketOutputSchema, mcpCompoundV3FetchMarketsInputSchema, mcpCompoundV3FetchMarketsOutputSchema, mcpCompoundV3RepayInputSchema, mcpCompoundV3SupplyInputSchema, mcpCompoundV3WithdrawInputSchema, mcpContinuumDaoAttachInputSchema, mcpContinuumDaoCastVoteBravoInputSchema, mcpContinuumDaoCastVoteDeltaInputSchema, mcpContinuumDaoCreateLockInputSchema, mcpContinuumDaoDelegateInputSchema, mcpContinuumDaoExplainProposalInputSchema, mcpContinuumDaoExplainProposalOutputSchema, mcpContinuumDaoFetchDelegatesInputSchema, mcpContinuumDaoFetchDelegatesOutputSchema, mcpContinuumDaoFetchLiveProposalsInputSchema, mcpContinuumDaoFetchLiveProposalsOutputSchema, mcpContinuumDaoFetchProposalInputSchema, mcpContinuumDaoFetchProposalOutputSchema, mcpContinuumDaoFetchProposalStateInputSchema, mcpContinuumDaoFetchProposalStateOutputSchema, mcpContinuumDaoFetchProposalsInputSchema, mcpContinuumDaoFetchProposalsOutputSchema, mcpContinuumDaoFetchVotingPowerInputSchema, mcpContinuumDaoFetchVotingPowerOutputSchema, mcpContinuumDaoForumCreateIdeaInputSchema, mcpContinuumDaoForumCreateIdeaOutputSchema, mcpContinuumDaoForumCreateTopicInputSchema, mcpContinuumDaoForumCreateTopicOutputSchema, mcpContinuumDaoForumDeleteInputSchema, mcpContinuumDaoForumDeleteOutputSchema, mcpContinuumDaoForumFetchPostInputSchema, mcpContinuumDaoForumFetchPostOutputSchema, mcpContinuumDaoForumFetchThreadInputSchema, mcpContinuumDaoForumFetchThreadOutputSchema, mcpContinuumDaoForumMarkReadInputSchema, mcpContinuumDaoForumMarkReadOutputSchema, mcpContinuumDaoForumMarkUnreadInputSchema, mcpContinuumDaoForumMarkUnreadOutputSchema, mcpContinuumDaoForumMeInputSchema, mcpContinuumDaoForumMeOutputSchema, mcpContinuumDaoForumReactInputSchema, mcpContinuumDaoForumReactOutputSchema, mcpContinuumDaoForumRecentInputSchema, mcpContinuumDaoForumRecentOutputSchema, mcpContinuumDaoForumReplyCountInputSchema, mcpContinuumDaoForumReplyCountOutputSchema, mcpContinuumDaoForumReplyInputSchema, mcpContinuumDaoForumReplyOutputSchema, mcpContinuumDaoForumResolveInputSchema, mcpContinuumDaoForumResolveOutputSchema, mcpContinuumDaoForumSearchInputSchema, mcpContinuumDaoForumSearchOutputSchema, mcpContinuumDaoForumSectionsInputSchema, mcpContinuumDaoForumSectionsOutputSchema, mcpContinuumDaoForumSignInEligibleInputSchema, mcpContinuumDaoForumSignInEligibleOutputSchema, mcpContinuumDaoForumSignInInputSchema, mcpContinuumDaoForumSignOutInputSchema, mcpContinuumDaoForumSignOutOutputSchema, mcpContinuumDaoForumUnreadInputSchema, mcpContinuumDaoForumUnreadOutputSchema, mcpContinuumDaoForumUserPostIdsInputSchema, mcpContinuumDaoForumUserPostIdsOutputSchema, mcpContinuumDaoIncreaseAmountInputSchema, mcpContinuumDaoIncreaseUnlockTimeInputSchema, mcpContinuumDaoMergeInputSchema, mcpContinuumDaoProposalIdInputSchema, mcpContinuumDaoProposeBravoInputSchema, mcpContinuumDaoProposeDeltaInputSchema, mcpContinuumDaoRegisterProposalInputSchema, mcpContinuumDaoRegisterProposalOutputSchema, mcpContinuumDaoRequestDetachInputSchema, mcpContinuumDaoSplitInputSchema, mcpContinuumDaoTokenIdInputSchema, mcpContinuumDaoTransferInputSchema, mcpContinuumDaoUndelegateInputSchema, mcpCurveDaoBuildAddLiquidityMultisignInputSchema, mcpCurveDaoBuildGaugeDepositMultisignInputSchema, mcpCurveDaoBuildRemoveLiquidityMultisignInputSchema, mcpCurveDaoBuildSwapMultisignInputSchema, mcpCurveDaoFetchImportantPoolsInputSchema, mcpCurveDaoFetchImportantPoolsOutputSchema, mcpCurveDaoFetchLpYieldsInputSchema, mcpCurveDaoFetchLpYieldsOutputSchema, mcpCurveDaoQuoteAddLiquidityInputSchema, mcpCurveDaoQuoteAddLiquidityOutputSchema, mcpCurveDaoQuoteInputSchema, mcpCurveDaoQuoteOutputSchema, mcpCurveDaoQuoteRemoveLiquidityInputSchema, mcpCurveDaoQuoteRemoveLiquidityOutputSchema, mcpEthenaClaimInputSchema, mcpEthenaCooldownInputSchema, mcpEthenaFetchSusdeApyInputSchema, mcpEthenaFetchSusdeApyOutputSchema, mcpEthenaRedeemInputSchema, mcpEthenaStakeInputSchema, mcpEulerV2BorrowRepayInputSchema, mcpEulerV2CollateralDepositInputSchema, mcpEulerV2CollateralWithdrawInputSchema, mcpEulerV2FetchEarnVaultsInputSchema, mcpEulerV2FetchEarnVaultsOutputSchema, mcpEulerV2FetchLendVaultsInputSchema, mcpEulerV2FetchLendVaultsOutputSchema, mcpEulerV2IsolatedBorrowInputSchema, mcpEulerV2IsolatedLendInputSchema, mcpEulerV2VaultWithdrawInputSchema, mcpGmxCancelInputSchema, mcpGmxDecreaseInputSchema, mcpGmxFetchGmApyInputSchema, mcpGmxFetchGmApyOutputSchema, mcpGmxFetchGmMarketsInputSchema, mcpGmxFetchGmMarketsOutputSchema, mcpGmxFetchMarketPricesInputSchema, mcpGmxFetchMarketPricesOutputSchema, mcpGmxFetchMarketsInputSchema, mcpGmxFetchMarketsOutputSchema, mcpGmxFetchOhlcvInputSchema, mcpGmxFetchOhlcvOutputSchema, mcpGmxFetchOrdersInputSchema, mcpGmxFetchOrdersOutputSchema, mcpGmxFetchPositionsInputSchema, mcpGmxFetchPositionsOutputSchema, mcpGmxFetchStakingPowerInputSchema, mcpGmxFetchStakingPowerOutputSchema, mcpGmxGmDepositInputSchema, mcpGmxGmWithdrawInputSchema, mcpGmxIncreaseInputSchema, mcpServerSubmitOutputSchema as mcpGmxMultisignOutputSchema, mcpGmxStakeGmxInputSchema, mcpGmxUnstakeGmxInputSchema, mcpHyperliquidBridgeDepositInputSchema, mcpHyperliquidBridgeWithdrawInputSchema, mcpHyperliquidCancelInputSchema, mcpHyperliquidCloseInputSchema, mcpHyperliquidDelegateInputSchema, mcpHyperliquidFetchDelegationsInputSchema, mcpHyperliquidFetchDelegationsOutputSchema, mcpHyperliquidFetchMarketSnapshotInputSchema, mcpHyperliquidFetchMarketSnapshotOutputSchema, mcpHyperliquidFetchMarketsInputSchema, mcpHyperliquidFetchMarketsOutputSchema, mcpHyperliquidFetchOhlcvInputSchema, mcpHyperliquidFetchOhlcvOutputSchema, mcpHyperliquidFetchOpenContextInputSchema, mcpHyperliquidFetchOpenContextOutputSchema, mcpHyperliquidFetchOpenOrdersInputSchema, mcpHyperliquidFetchOpenOrdersOutputSchema, mcpHyperliquidFetchPositionsInputSchema, mcpHyperliquidFetchPositionsOutputSchema, mcpHyperliquidFetchStakingSummaryInputSchema, mcpHyperliquidFetchStakingSummaryOutputSchema, mcpHyperliquidFetchStockMarketsInputSchema, mcpHyperliquidFetchStockMarketsOutputSchema, mcpHyperliquidFetchUsdClassBalancesInputSchema, mcpHyperliquidFetchUsdClassBalancesOutputSchema, mcpHyperliquidFetchUserVaultEquitiesInputSchema, mcpHyperliquidFetchUserVaultEquitiesOutputSchema, mcpHyperliquidFetchVaultApysInputSchema, mcpHyperliquidFetchVaultApysOutputSchema, mcpHyperliquidFetchVaultsInputSchema, mcpHyperliquidFetchVaultsOutputSchema, mcpHyperliquidLimitOrderInputSchema, mcpHyperliquidSearchMarketsInputSchema, mcpHyperliquidSearchMarketsOutputSchema, mcpHyperliquidStakeInputSchema, mcpHyperliquidUndelegateInputSchema, mcpHyperliquidUnstakeInputSchema, mcpHyperliquidUpdateLeverageInputSchema, mcpHyperliquidUsdTransferInputSchema, mcpHyperliquidVaultDepositInputSchema, mcpHyperliquidVaultWithdrawInputSchema, mcpLidoClaimWithdrawalInputSchema, mcpLidoFetchStethAprInputSchema, mcpLidoFetchStethAprOutputSchema, mcpLidoRequestWithdrawalsInputSchema, mcpLidoSubmitInputSchema, mcpLidoUnwrapWstEthInputSchema, mcpLidoWrapStEthInputSchema, mcpMapleDepositInputSchema, mcpMapleFetchMarketInputSchema, mcpMapleFetchMarketOutputSchema, mcpMapleFetchMarketsInputSchema, mcpMapleFetchMarketsOutputSchema, mcpMapleRequestRedeemInputSchema, mcpMorphoBlueBorrowInputSchema, mcpMorphoBlueCollateralDepositInputSchema, mcpMorphoBlueCollateralWithdrawInputSchema, mcpMorphoBlueRepayInputSchema, mcpMorphoFetchBlueMarketsInputSchema, mcpMorphoFetchBlueMarketsOutputSchema, mcpMorphoFetchEarnVaultsInputSchema, mcpMorphoFetchEarnVaultsOutputSchema, mcpMorphoFetchMidnightBooksInputSchema, mcpMorphoFetchMidnightBooksOutputSchema, mcpMorphoFetchMidnightOffersInputSchema, mcpMorphoFetchMidnightOffersOutputSchema, mcpMorphoFetchMidnightPositionsInputSchema, mcpMorphoFetchMidnightPositionsOutputSchema, mcpMorphoFetchMidnightQuoteInputSchema, mcpMorphoFetchMidnightQuoteOutputSchema, mcpMorphoMerklClaimInputSchema, mcpMorphoMidnightBorrowInputSchema, mcpMorphoMidnightCancelLendOfferInputSchema, mcpMorphoMidnightLendInputSchema, mcpMorphoMidnightLendOfferInputSchema, mcpMorphoMidnightRepayInputSchema, mcpMorphoVaultDepositInputSchema, mcpMorphoVaultWithdrawInputSchema, mcpMultisignInput, multisignOutputSchema as mcpMultisignOutputSchema, mcpServerSubmitOutputSchema as mcpMultisignSubmitOutputSchema, mcpServerCommonInputSchema, mcpServerMultisignInput, mcpServerSubmitOutputSchema, mcpSkyFetchSusdsRateInputSchema, mcpSkyFetchSusdsRateOutputSchema, mcpSkyLockstakeCloseInputSchema, mcpSkyLockstakeDrawInputSchema, mcpSkyLockstakeGetRewardInputSchema, mcpSkyLockstakeStakeInputSchema, mcpSkyLockstakeWipeInputSchema, mcpSkySusdsDepositInputSchema, mcpSkySusdsRedeemInputSchema, mcpUniswapV4BuildAllowlistFinalizeMultisignInputSchema, mcpUniswapV4BuildCollectFeesMultisignInputSchema, mcpUniswapV4BuildDecreaseLiquidityMultisignInputSchema, mcpUniswapV4BuildIncreaseLiquidityMultisignInputSchema, mcpUniswapV4BuildLimitOrderMultisignInputSchema, mcpUniswapV4BuildMintLiquidityMultisignInputSchema, mcpUniswapV4BuildSwapMultisignInputSchema, mcpUniswapV4CheckPermissionsInputSchema, mcpUniswapV4CheckPermissionsOutputSchema, mcpUniswapV4CreateSwapInputSchema, mcpUniswapV4CreateSwapOutputSchema, mcpUniswapV4FetchLimitOrdersInputSchema, mcpUniswapV4FetchLimitOrdersOutputSchema, mcpUniswapV4FetchOhlcvInputSchema, mcpUniswapV4FetchOhlcvOutputSchema, mcpUniswapV4KycApplyLinkInputSchema, mcpUniswapV4KycApplyLinkOutputSchema, mcpUniswapV4LimitOrderQuoteInputSchema, mcpUniswapV4LimitOrderQuoteOutputSchema, mcpUniswapV4LpClaimInputSchema, mcpUniswapV4LpClaimOutputSchema, mcpUniswapV4LpCreatePositionInputSchema, mcpUniswapV4LpCreatePositionOutputSchema, mcpUniswapV4LpDecreaseInputSchema, mcpUniswapV4LpDecreaseOutputSchema, mcpUniswapV4LpIncreaseInputSchema, mcpUniswapV4LpIncreaseOutputSchema, mcpUniswapV4LpListPoolsInputSchema, mcpUniswapV4LpListPoolsOutputSchema, mcpUniswapV4LpListPositionsInputSchema, mcpUniswapV4LpListPositionsOutputSchema, mcpUniswapV4QuoteInputSchema, mcpUniswapV4QuoteOutputSchema, mcpUniswapV4RegisterPositionFromMintTxInputSchema, mcpUniswapV4RegisterPositionFromMintTxOutputSchema, mcpUniswapV4RegisterPositionNftInputSchema, mcpUniswapV4RegisterPositionNftOutputSchema, mcpVeniceBurnDiemInputSchema, mcpVeniceCompleteUnstakeDiemInputSchema, mcpVeniceCompleteUnstakeSvvvInputSchema, mcpVeniceInitiateUnstakeDiemInputSchema, mcpVeniceInitiateUnstakeSvvvInputSchema, mcpVeniceListModelsInputSchema, mcpVeniceListModelsOutputSchema, mcpVeniceMintDiemInputSchema, mcpVeniceReadMintDiemPreviewInputSchema, mcpVeniceReadMintDiemPreviewOutputSchema, mcpVeniceReadStakingStateInputSchema, mcpVeniceReadStakingStateOutputSchema, mcpVeniceStakeDiemInputSchema, mcpVeniceStakeVvvInputSchema, multisignOutputSchema, parseAgentBoolean, parseAgentEvmChainId, parseMcpToolInput, parseMcpToolOutput, parseMultisignBuilderOutput, uniswapQuoteTradeTypeSchema, zodSchemaToMcpJsonSchema };
11188
+ export { EVM_COMMON_PARAM_DOCS, MANAGEMENT_SIG_DOC, MCP_NON_SUBMIT_TOOL_NAMES, MCP_TOOL_DEFINITIONS, MCP_TOOL_INPUT_SCHEMAS, MCP_TOOL_OUTPUT_SCHEMAS, MULTISIGN_OUTPUT_DOC, MULTISIGN_SUBMIT_OUTPUT_DOC, PROTOCOL_SUPPORT_ADVISORS, chainDetailSchema, evmAddressSchema, evmMultisignCommonInputSchema, getActionsByChainCategory, getAgentCatalog, getAgentCatalogForMcp, getMcpToolByName, getMcpToolDefinitions, getMcpToolInputSchema, getMcpToolOutputSchema, getProtocolDiscoverySummary, getProtocolModules, getProtocolSkill, getProtocolSupportAdvisor, getToolsForProtocol, jsonObjectSchema, keyGenSchema, listProtocolSupportAdvisorIds, listProtocolsWithSkills, mcpAaveV4BorrowInputSchema, mcpAaveV4DepositInputSchema, mcpAaveV4FetchMarketInputSchema, mcpAaveV4FetchMarketOutputSchema, mcpAaveV4FetchMarketsInputSchema, mcpAaveV4FetchMarketsOutputSchema, mcpAaveV4RepayInputSchema, mcpAaveV4WithdrawInputSchema, mcpAerodromeBuildAddLiquidityMultisignInputSchema, mcpAerodromeBuildClBurnMultisignInputSchema, mcpAerodromeBuildClCollectFeesMultisignInputSchema, mcpAerodromeBuildClDecreaseMultisignInputSchema, mcpAerodromeBuildClIncreaseMultisignInputSchema, mcpAerodromeBuildClMintMultisignInputSchema, mcpAerodromeBuildClaimEmissionsMultisignInputSchema, mcpAerodromeBuildClaimFeesMultisignInputSchema, mcpAerodromeBuildGaugeStakeMultisignInputSchema, mcpAerodromeBuildGaugeUnstakeMultisignInputSchema, mcpAerodromeBuildRemoveLiquidityMultisignInputSchema, mcpAerodromeBuildSwapMultisignInputSchema, mcpAerodromeDiscoverPoolsInputSchema, mcpAerodromeDiscoverPoolsOutputSchema, mcpAerodromeFetchLpYieldsInputSchema, mcpAerodromeFetchLpYieldsOutputSchema, mcpAerodromeFetchPoolsInputSchema, mcpAerodromeFetchPoolsOutputSchema, mcpAerodromeFetchPositionsInputSchema, mcpAerodromeFetchPositionsOutputSchema, mcpAerodromeFetchStockLpYieldsInputSchema, mcpAerodromeFetchStockLpYieldsOutputSchema, mcpAerodromeQuoteAddLiquidityInputSchema, mcpAerodromeQuoteAddLiquidityOutputSchema, mcpAerodromeQuoteClDepositInputSchema, mcpAerodromeQuoteClDepositOutputSchema, mcpAerodromeQuoteInputSchema, mcpAerodromeQuoteOutputSchema, mcpArcusBuildCancelOrderMultisignInputSchema, mcpArcusBuildCloseMultisignInputSchema, mcpArcusBuildCreateApiKeyMultisignInputSchema, mcpArcusBuildDepositMultisignInputSchema, mcpArcusBuildPlaceOrderMultisignInputSchema, mcpArcusBuildSetLeverageMultisignInputSchema, mcpArcusBuildWithdrawMultisignInputSchema, mcpArcusFetchAccountInputSchema, mcpArcusFetchAccountOutputSchema, mcpArcusFetchMarketSnapshotInputSchema, mcpArcusFetchMarketSnapshotOutputSchema, mcpArcusFetchMarketsInputSchema, mcpArcusFetchMarketsOutputSchema, mcpArcusFetchOhlcvInputSchema, mcpArcusFetchOhlcvOutputSchema, mcpArcusFetchOpenContextInputSchema, mcpArcusFetchOpenContextOutputSchema, mcpArcusFetchOpenOrdersInputSchema, mcpArcusFetchOpenOrdersOutputSchema, mcpArcusFetchPositionsInputSchema, mcpArcusFetchPositionsOutputSchema, mcpArcusSearchMarketsInputSchema, mcpArcusSearchMarketsOutputSchema, mcpArcusSpotBuildRfqMultisignInputSchema, mcpArcusSpotFetchBalancesInputSchema, mcpArcusSpotFetchBalancesOutputSchema, mcpArcusSpotFetchMarketsInputSchema, mcpArcusSpotFetchMarketsOutputSchema, mcpArcusSpotFetchOhlcvInputSchema, mcpArcusSpotFetchOhlcvOutputSchema, mcpCompoundV3BulkerInputSchema, mcpCompoundV3ClaimRewardsInputSchema, mcpCompoundV3FetchAccountInputSchema, mcpCompoundV3FetchAccountOutputSchema, mcpCompoundV3FetchMarketInputSchema, mcpCompoundV3FetchMarketOutputSchema, mcpCompoundV3FetchMarketsInputSchema, mcpCompoundV3FetchMarketsOutputSchema, mcpCompoundV3RepayInputSchema, mcpCompoundV3SupplyInputSchema, mcpCompoundV3WithdrawInputSchema, mcpContinuumDaoAttachInputSchema, mcpContinuumDaoCastVoteBravoInputSchema, mcpContinuumDaoCastVoteDeltaInputSchema, mcpContinuumDaoCreateLockInputSchema, mcpContinuumDaoDelegateInputSchema, mcpContinuumDaoExplainProposalInputSchema, mcpContinuumDaoExplainProposalOutputSchema, mcpContinuumDaoFetchDelegatesInputSchema, mcpContinuumDaoFetchDelegatesOutputSchema, mcpContinuumDaoFetchLiveProposalsInputSchema, mcpContinuumDaoFetchLiveProposalsOutputSchema, mcpContinuumDaoFetchProposalInputSchema, mcpContinuumDaoFetchProposalOutputSchema, mcpContinuumDaoFetchProposalStateInputSchema, mcpContinuumDaoFetchProposalStateOutputSchema, mcpContinuumDaoFetchProposalsInputSchema, mcpContinuumDaoFetchProposalsOutputSchema, mcpContinuumDaoFetchVotingPowerInputSchema, mcpContinuumDaoFetchVotingPowerOutputSchema, mcpContinuumDaoForumCreateIdeaInputSchema, mcpContinuumDaoForumCreateIdeaOutputSchema, mcpContinuumDaoForumCreateTopicInputSchema, mcpContinuumDaoForumCreateTopicOutputSchema, mcpContinuumDaoForumDeleteInputSchema, mcpContinuumDaoForumDeleteOutputSchema, mcpContinuumDaoForumFetchPostInputSchema, mcpContinuumDaoForumFetchPostOutputSchema, mcpContinuumDaoForumFetchThreadInputSchema, mcpContinuumDaoForumFetchThreadOutputSchema, mcpContinuumDaoForumMarkReadInputSchema, mcpContinuumDaoForumMarkReadOutputSchema, mcpContinuumDaoForumMarkUnreadInputSchema, mcpContinuumDaoForumMarkUnreadOutputSchema, mcpContinuumDaoForumMeInputSchema, mcpContinuumDaoForumMeOutputSchema, mcpContinuumDaoForumReactInputSchema, mcpContinuumDaoForumReactOutputSchema, mcpContinuumDaoForumRecentInputSchema, mcpContinuumDaoForumRecentOutputSchema, mcpContinuumDaoForumReplyCountInputSchema, mcpContinuumDaoForumReplyCountOutputSchema, mcpContinuumDaoForumReplyInputSchema, mcpContinuumDaoForumReplyOutputSchema, mcpContinuumDaoForumResolveInputSchema, mcpContinuumDaoForumResolveOutputSchema, mcpContinuumDaoForumSearchInputSchema, mcpContinuumDaoForumSearchOutputSchema, mcpContinuumDaoForumSectionsInputSchema, mcpContinuumDaoForumSectionsOutputSchema, mcpContinuumDaoForumSignInEligibleInputSchema, mcpContinuumDaoForumSignInEligibleOutputSchema, mcpContinuumDaoForumSignInInputSchema, mcpContinuumDaoForumSignOutInputSchema, mcpContinuumDaoForumSignOutOutputSchema, mcpContinuumDaoForumUnreadInputSchema, mcpContinuumDaoForumUnreadOutputSchema, mcpContinuumDaoForumUserPostIdsInputSchema, mcpContinuumDaoForumUserPostIdsOutputSchema, mcpContinuumDaoIncreaseAmountInputSchema, mcpContinuumDaoIncreaseUnlockTimeInputSchema, mcpContinuumDaoMergeInputSchema, mcpContinuumDaoProposalIdInputSchema, mcpContinuumDaoProposeBravoInputSchema, mcpContinuumDaoProposeDeltaInputSchema, mcpContinuumDaoRegisterProposalInputSchema, mcpContinuumDaoRegisterProposalOutputSchema, mcpContinuumDaoRequestDetachInputSchema, mcpContinuumDaoSplitInputSchema, mcpContinuumDaoTokenIdInputSchema, mcpContinuumDaoTransferInputSchema, mcpContinuumDaoUndelegateInputSchema, mcpCurveDaoBuildAddLiquidityMultisignInputSchema, mcpCurveDaoBuildGaugeDepositMultisignInputSchema, mcpCurveDaoBuildRemoveLiquidityMultisignInputSchema, mcpCurveDaoBuildSwapMultisignInputSchema, mcpCurveDaoFetchImportantPoolsInputSchema, mcpCurveDaoFetchImportantPoolsOutputSchema, mcpCurveDaoFetchLpYieldsInputSchema, mcpCurveDaoFetchLpYieldsOutputSchema, mcpCurveDaoQuoteAddLiquidityInputSchema, mcpCurveDaoQuoteAddLiquidityOutputSchema, mcpCurveDaoQuoteInputSchema, mcpCurveDaoQuoteOutputSchema, mcpCurveDaoQuoteRemoveLiquidityInputSchema, mcpCurveDaoQuoteRemoveLiquidityOutputSchema, mcpEthenaClaimInputSchema, mcpEthenaCooldownInputSchema, mcpEthenaFetchSusdeApyInputSchema, mcpEthenaFetchSusdeApyOutputSchema, mcpEthenaRedeemInputSchema, mcpEthenaStakeInputSchema, mcpEulerV2BorrowRepayInputSchema, mcpEulerV2CollateralDepositInputSchema, mcpEulerV2CollateralWithdrawInputSchema, mcpEulerV2FetchEarnVaultsInputSchema, mcpEulerV2FetchEarnVaultsOutputSchema, mcpEulerV2FetchLendVaultsInputSchema, mcpEulerV2FetchLendVaultsOutputSchema, mcpEulerV2IsolatedBorrowInputSchema, mcpEulerV2IsolatedLendInputSchema, mcpEulerV2VaultWithdrawInputSchema, mcpGmxCancelInputSchema, mcpGmxDecreaseInputSchema, mcpGmxFetchGmApyInputSchema, mcpGmxFetchGmApyOutputSchema, mcpGmxFetchGmMarketsInputSchema, mcpGmxFetchGmMarketsOutputSchema, mcpGmxFetchMarketPricesInputSchema, mcpGmxFetchMarketPricesOutputSchema, mcpGmxFetchMarketsInputSchema, mcpGmxFetchMarketsOutputSchema, mcpGmxFetchOhlcvInputSchema, mcpGmxFetchOhlcvOutputSchema, mcpGmxFetchOrdersInputSchema, mcpGmxFetchOrdersOutputSchema, mcpGmxFetchPositionsInputSchema, mcpGmxFetchPositionsOutputSchema, mcpGmxFetchStakingPowerInputSchema, mcpGmxFetchStakingPowerOutputSchema, mcpGmxGmDepositInputSchema, mcpGmxGmWithdrawInputSchema, mcpGmxIncreaseInputSchema, mcpServerSubmitOutputSchema as mcpGmxMultisignOutputSchema, mcpGmxStakeGmxInputSchema, mcpGmxUnstakeGmxInputSchema, mcpHyperliquidBridgeDepositInputSchema, mcpHyperliquidBridgeWithdrawInputSchema, mcpHyperliquidCancelInputSchema, mcpHyperliquidCloseInputSchema, mcpHyperliquidDelegateInputSchema, mcpHyperliquidFetchDelegationsInputSchema, mcpHyperliquidFetchDelegationsOutputSchema, mcpHyperliquidFetchMarketSnapshotInputSchema, mcpHyperliquidFetchMarketSnapshotOutputSchema, mcpHyperliquidFetchMarketsInputSchema, mcpHyperliquidFetchMarketsOutputSchema, mcpHyperliquidFetchOhlcvInputSchema, mcpHyperliquidFetchOhlcvOutputSchema, mcpHyperliquidFetchOpenContextInputSchema, mcpHyperliquidFetchOpenContextOutputSchema, mcpHyperliquidFetchOpenOrdersInputSchema, mcpHyperliquidFetchOpenOrdersOutputSchema, mcpHyperliquidFetchPositionsInputSchema, mcpHyperliquidFetchPositionsOutputSchema, mcpHyperliquidFetchStakingSummaryInputSchema, mcpHyperliquidFetchStakingSummaryOutputSchema, mcpHyperliquidFetchStockMarketsInputSchema, mcpHyperliquidFetchStockMarketsOutputSchema, mcpHyperliquidFetchUsdClassBalancesInputSchema, mcpHyperliquidFetchUsdClassBalancesOutputSchema, mcpHyperliquidFetchUserVaultEquitiesInputSchema, mcpHyperliquidFetchUserVaultEquitiesOutputSchema, mcpHyperliquidFetchVaultApysInputSchema, mcpHyperliquidFetchVaultApysOutputSchema, mcpHyperliquidFetchVaultsInputSchema, mcpHyperliquidFetchVaultsOutputSchema, mcpHyperliquidLimitOrderInputSchema, mcpHyperliquidSearchMarketsInputSchema, mcpHyperliquidSearchMarketsOutputSchema, mcpHyperliquidStakeInputSchema, mcpHyperliquidUndelegateInputSchema, mcpHyperliquidUnstakeInputSchema, mcpHyperliquidUpdateLeverageInputSchema, mcpHyperliquidUsdTransferInputSchema, mcpHyperliquidVaultDepositInputSchema, mcpHyperliquidVaultWithdrawInputSchema, mcpLidoClaimWithdrawalInputSchema, mcpLidoFetchStethAprInputSchema, mcpLidoFetchStethAprOutputSchema, mcpLidoRequestWithdrawalsInputSchema, mcpLidoSubmitInputSchema, mcpLidoUnwrapWstEthInputSchema, mcpLidoWrapStEthInputSchema, mcpMapleDepositInputSchema, mcpMapleFetchMarketInputSchema, mcpMapleFetchMarketOutputSchema, mcpMapleFetchMarketsInputSchema, mcpMapleFetchMarketsOutputSchema, mcpMapleRequestRedeemInputSchema, mcpMorphoBlueBorrowInputSchema, mcpMorphoBlueCollateralDepositInputSchema, mcpMorphoBlueCollateralWithdrawInputSchema, mcpMorphoBlueRepayInputSchema, mcpMorphoFetchBlueMarketsInputSchema, mcpMorphoFetchBlueMarketsOutputSchema, mcpMorphoFetchEarnVaultsInputSchema, mcpMorphoFetchEarnVaultsOutputSchema, mcpMorphoFetchMidnightBooksInputSchema, mcpMorphoFetchMidnightBooksOutputSchema, mcpMorphoFetchMidnightOffersInputSchema, mcpMorphoFetchMidnightOffersOutputSchema, mcpMorphoFetchMidnightPositionsInputSchema, mcpMorphoFetchMidnightPositionsOutputSchema, mcpMorphoFetchMidnightQuoteInputSchema, mcpMorphoFetchMidnightQuoteOutputSchema, mcpMorphoMerklClaimInputSchema, mcpMorphoMidnightBorrowInputSchema, mcpMorphoMidnightCancelLendOfferInputSchema, mcpMorphoMidnightLendInputSchema, mcpMorphoMidnightLendOfferInputSchema, mcpMorphoMidnightRepayInputSchema, mcpMorphoVaultDepositInputSchema, mcpMorphoVaultWithdrawInputSchema, mcpMultisignInput, multisignOutputSchema as mcpMultisignOutputSchema, mcpServerSubmitOutputSchema as mcpMultisignSubmitOutputSchema, mcpPendleBuildAddLiquidityMultisignInputSchema, mcpPendleBuildMintPyMultisignInputSchema, mcpPendleBuildMintSyMultisignInputSchema, mcpPendleBuildRedeemPyMultisignInputSchema, mcpPendleBuildRedeemRewardsMultisignInputSchema, mcpPendleBuildRedeemSyMultisignInputSchema, mcpPendleBuildRemoveLiquidityMultisignInputSchema, mcpPendleBuildSwapMultisignInputSchema, mcpPendleFetchMarketsInputSchema, mcpPendleFetchMarketsOutputSchema, mcpPendleFetchMerkleRewardsInputSchema, mcpPendleFetchMerkleRewardsOutputSchema, mcpPendleFetchPositionsInputSchema, mcpPendleFetchPositionsOutputSchema, mcpPendleFetchPricesInputSchema, mcpPendleFetchPricesOutputSchema, mcpPendleQuoteAddLiquidityInputSchema, mcpPendleQuoteMintPyInputSchema, mcpPendleQuoteMintSyInputSchema, mcpPendleQuoteOutputSchema, mcpPendleQuoteRedeemPyInputSchema, mcpPendleQuoteRedeemSyInputSchema, mcpPendleQuoteRemoveLiquidityInputSchema, mcpPendleQuoteSwapInputSchema, mcpPendleSearchAssetsInputSchema, mcpPendleSearchAssetsOutputSchema, mcpServerCommonInputSchema, mcpServerMultisignInput, mcpServerSubmitOutputSchema, mcpSkyFetchSusdsRateInputSchema, mcpSkyFetchSusdsRateOutputSchema, mcpSkyLockstakeCloseInputSchema, mcpSkyLockstakeDrawInputSchema, mcpSkyLockstakeGetRewardInputSchema, mcpSkyLockstakeStakeInputSchema, mcpSkyLockstakeWipeInputSchema, mcpSkySusdsDepositInputSchema, mcpSkySusdsRedeemInputSchema, mcpUniswapV4BuildAllowlistFinalizeMultisignInputSchema, mcpUniswapV4BuildCollectFeesMultisignInputSchema, mcpUniswapV4BuildDecreaseLiquidityMultisignInputSchema, mcpUniswapV4BuildIncreaseLiquidityMultisignInputSchema, mcpUniswapV4BuildLimitOrderMultisignInputSchema, mcpUniswapV4BuildMintLiquidityMultisignInputSchema, mcpUniswapV4BuildSwapMultisignInputSchema, mcpUniswapV4CheckPermissionsInputSchema, mcpUniswapV4CheckPermissionsOutputSchema, mcpUniswapV4CreateSwapInputSchema, mcpUniswapV4CreateSwapOutputSchema, mcpUniswapV4FetchLimitOrdersInputSchema, mcpUniswapV4FetchLimitOrdersOutputSchema, mcpUniswapV4FetchOhlcvInputSchema, mcpUniswapV4FetchOhlcvOutputSchema, mcpUniswapV4KycApplyLinkInputSchema, mcpUniswapV4KycApplyLinkOutputSchema, mcpUniswapV4LimitOrderQuoteInputSchema, mcpUniswapV4LimitOrderQuoteOutputSchema, mcpUniswapV4LpClaimInputSchema, mcpUniswapV4LpClaimOutputSchema, mcpUniswapV4LpCreatePositionInputSchema, mcpUniswapV4LpCreatePositionOutputSchema, mcpUniswapV4LpDecreaseInputSchema, mcpUniswapV4LpDecreaseOutputSchema, mcpUniswapV4LpIncreaseInputSchema, mcpUniswapV4LpIncreaseOutputSchema, mcpUniswapV4LpListPoolsInputSchema, mcpUniswapV4LpListPoolsOutputSchema, mcpUniswapV4LpListPositionsInputSchema, mcpUniswapV4LpListPositionsOutputSchema, mcpUniswapV4QuoteInputSchema, mcpUniswapV4QuoteOutputSchema, mcpUniswapV4RegisterPositionFromMintTxInputSchema, mcpUniswapV4RegisterPositionFromMintTxOutputSchema, mcpUniswapV4RegisterPositionNftInputSchema, mcpUniswapV4RegisterPositionNftOutputSchema, mcpVeniceBurnDiemInputSchema, mcpVeniceCompleteUnstakeDiemInputSchema, mcpVeniceCompleteUnstakeSvvvInputSchema, mcpVeniceInitiateUnstakeDiemInputSchema, mcpVeniceInitiateUnstakeSvvvInputSchema, mcpVeniceListModelsInputSchema, mcpVeniceListModelsOutputSchema, mcpVeniceMintDiemInputSchema, mcpVeniceReadMintDiemPreviewInputSchema, mcpVeniceReadMintDiemPreviewOutputSchema, mcpVeniceReadStakingStateInputSchema, mcpVeniceReadStakingStateOutputSchema, mcpVeniceStakeDiemInputSchema, mcpVeniceStakeVvvInputSchema, multisignOutputSchema, parseAgentBoolean, parseAgentEvmChainId, parseMcpToolInput, parseMcpToolOutput, parseMultisignBuilderOutput, uniswapQuoteTradeTypeSchema, zodSchemaToMcpJsonSchema };
10366
11189
  //# sourceMappingURL=catalog.js.map
10367
11190
  //# sourceMappingURL=catalog.js.map